題解 P2290 HNOI2004 樹的計數

2021-10-12 17:33:30 字數 1280 閱讀 5299

乙個有 n 個節點的樹,設它的節點分別為 v1,

v2,…

,v

nv_1,v_2,\ldots,v_n

v1​,v2

​,…,

vn​,已知第 i 個節點 v

iv_i

vi​​ 的度數為 d

id_i

di​​,問滿足這樣的條件的不同的樹有多少棵

有關樹的形態計數,考慮prufer序列

每個prufer序列對應乙個無根樹,如果可以求得prufer序列方案數即得到答案

每個度數為d

dd的點u

uu在prufer序列**現d−1

d - 1

d−1次,序列長度為n−2

n - 2

n−2

根據可重全排列公式可以得到方案數為(n−

2)!π

i=1n

(di−

1)

\frac^(d_i - 1)}

πi=1n​

(di​

−1)(

n−2)

!​,其中d

id_i

di​表示第i個點的度數

注意特判無解情況:

#include

using

namespace std;

inline

intread()

while

(ch >=

'0'&& ch <=

'9')

return s * w;

}const

int maxn =

150+50;

const

int maxm =

1e7+10;

int n,ans,sum;

int d[maxn]

,jc[maxm]

;int

main()

; sum +

= d[i]-1

;}jc[0]

=1;for

(int i =

1; i <= n ; i ++

) jc[i]

= jc[i -1]

* i;

if(sum != n -2)

; ans =1;

int j =1;

for(

int i =

1; i <= n -

2; i ++)}

cout << ans << endl;

return0;

}

洛谷 P2290 HNOI2004 樹的計數

輸入格式 輸入檔案第一行是乙個正整數n,表示樹有n個結點。第二行有n個數,第i個數表示di,即樹的第i個結點的度數。其中1 n 150,輸入資料保證滿足條件的樹不超過10 17個。輸出格式 輸出滿足條件的樹有多少棵。輸入樣例 1 4 2 1 2 1 輸出樣例 1 2題解 質因數分解 prufer數列...

題解 P2285 HNOI2004 打鼴鼠

現在知道在一段時間內,鼴鼠出現的時間和地點,請編寫乙個程式使機械人在這一段時間內打死盡可能多的鼴鼠。首先,座標為 x,y 到座標為 a,b 的網格需要的時間為 x a y b 由於題目已經自動幫我們按時間排好序了,所以,我們可以直接 dp 考慮揹包 include using namespace s...

題解 P2292 HNOI2004 L語言

這到題一眼看去,似乎就是個ac自動機,然後迅速的打出了ac自動機的板子。最開始我想的是,不就判斷一下長度就行了嗎,把每乙個單詞的長度求出來,在ac自動機的時候每次用當前位置的下標減去單詞長度,如果小於等於目前的字首長度,就更新答案,然後迅速地打出 發現只有70分,仔細思考了一下,發現是因為我沒有讀清...