bzoj 1211 HNOI2004 樹的計數

2021-08-09 03:43:10 字數 619 閱讀 4301

題意:給出每個節點的度數,問有多少棵樹滿足這些度數。

題解:prüfer序列+組合數學

prüfer序列是由標號樹產生的唯一數列。生成方法:

一棵樹要得到普呂弗序列,方法是逐次去掉樹的頂點,直到剩下兩個頂點。考慮樹t,其頂點為。在第i步,去掉標號最小的葉,並把普呂弗序列的第i項設為這葉的鄰頂點的標號。

序列和樹是一一對應的,而每個點的度數-1就是這個點在prüfer序列中出現的次數。排列組合搞一搞就好了。

**:

#include

#include

int n,d[160],s[34],sum=0,prime=;

void wk(int x,int y)

}}int main()

for(int i=1;i<=n;i++)

sum+=d[i];

}if(sum!=(n-1

<<1))

for(int i=1;i1;i++)

for(int i=1;i<=n;i++)

long

long ans=1;

for(int i=0;i<34;i++)

BZOJ 1211 HNOI2004 樹的計數

今天早上由於剩下的非許可權題實在是太難了。於是學了一下新東西續命。直接prufer序列排列組合就好了。注意各種0的情況 code include include typedef long long ll const ll n 155 ll n ll a n ll pri n ll tot ll cn...

bzoj1211 HNOI2004 樹的計數

題目傳送門 解法 prufer數列。有這麼三個性質 乙個prufer數列與乙個無根樹一一對應。乙個n個節點的無根樹的prufer數列長度為n 2。乙個點的度數等於他在prufer數列裡面出現的次數 1。第三個性質這樣證明 首先需要了解prufer序列如何構造 看這裡在prufer數列中,如果乙個點出...

bzoj1211 HNOI2004 樹的計數

題目鏈結 乙個有n個結點的樹,設它的結點分別為v1,v2,vn,已知第i個結點vi的度數為di,問滿足這樣的條件的不同的樹有多少棵。給定n,d1,d2,dn,程式設計需要輸出滿足d vi di的樹的個數。prufer序列,明明的煩惱簡化版。bzoj1211 include include inclu...