【題意】
給出乙個有n個點的無向圖,其中有n-1條主要邊且這些主要邊構成一棵樹,此外還有m條其他邊,求斬斷原圖的一條主要邊和k條其他邊使得圖不連通的方案數mod109+7的值。
注意,就算你切斷一條主要邊和不足k條附加邊之後就已經使圖不連通,你也需要再切夠k條附加邊才算一種方案。
【解法】
回顧原題暗之鏈鎖,我們仍然從連通塊之間相連的邊入手。
所有合法方案中不外乎k+1種情況:
1.兩個連通塊之間沒有附加邊相連,那麼只要在m條附加邊中任選k條即可,ans+=c(m,k);
2.兩個連通塊之間有1條附加邊相連,那麼切斷這條附加邊之後再從剩下的m-1條邊中任選k-1條邊即可,ans+=c(m-1,k-1);
3.兩個連通塊之間有2條附加邊相連,那麼切斷這2條附加邊之後再從剩下的m-2條邊中任選k-2條邊即可,ans+=c(m-2,k-2);
k+1.兩個連通塊之間有k條附加邊相連,那麼切斷這k條附加邊(之後再從剩下的0條邊中選0條邊)即可,ans+=1;
注意,這裡的k+1方案中用到了c(0,0),在這裡我們認為c(0,0)=1(因為這確實是一種可行方案)。
總的思路就很明確了,使用樹鏈剖分或者樹上差分標記邊來維護每條主要邊連線的兩個連通塊間的附加邊數,最後列舉每條邊,對於一條邊,如果它被標記了x次,那麼ans+=c(m-x,k-x)。
再次強調,認為c(0,0)=1。另外,對於被標記超過k次的主要邊,沒有合法方案,跳過。
另外,鑑於組合數範圍很小,不需要用到拓展lucas,直接階乘預處理之後尤拉定理(在這裡也是費馬小定理)算逆元即可,當然用拓展歐幾里德或者線性篩也可以。
【後記】
本題作為暗之鏈鎖的推廣版,實際上除了組合數之外並沒有什麼難度的提高。
作為樹剖練手題以及樹上差分入門題,感覺出完題之後樹剖熟練了很多。然而樹上差分還是不熟,需要多打。
題目243 交換輸出
時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述 輸入n n 100 個數,找出其中最小的數,將它與最前面的數交換後輸出這些數。如果這個第乙個數就是最小的數,則保持原樣輸出,如果最小的數有相同的按照前面的交換 輸入 輸入資料有多組,每組佔一行,每行的開始是乙個整數n,表示這個測...
nyoj 243交換輸出
描述 輸入n n 100 個數,找出其中最小的數,將它與最前面的數交換後輸出這些數。如果這個第乙個數就是最小的數,則保持原樣輸出,如果最小的數有相同的按照前面的交換 輸入 輸入資料有多組,每組佔一行,每行的開始是乙個整數n,表示這個測試例項的數值的個數,跟著就是n個整數。n 0表示輸入的結束,不做處...
NYOJ 243 交換輸出
時間限制 3000 ms 記憶體限制 65535 kb 難度 1 描述 輸入n n 100 個數,找出其中最小的數,將它與最前面的數交換後輸出這些數。如果這個第乙個數就是最小的數,則保持原樣輸出,如果最小的數有相同的按照前面的交換 輸入 輸入資料有多組,每組佔一行,每行的開始是乙個整數n,表示這個測...