洛谷 P2290 HNOI2004 樹的計數

2022-02-13 03:22:56 字數 1395 閱讀 4450

輸入格式:

輸入檔案第一行是乙個正整數n,表示樹有n個結點。第二行有n個數,第i個數表示di,即樹的第i個結點的度數。其中1<=n<=150,輸入資料保證滿足條件的樹不超過10^17個。

輸出格式:

輸出滿足條件的樹有多少棵。

輸入樣例#1:

4                     

2 1 2 1

輸出樣例#1:

2

題解:質因數分解+prufer數列以前學過prufer數列...全忘了....

n個點的無根樹對應的數列的長度為n-2,這說明乙個n個點的無根樹有n^(n-2)種

樹轉prufer數列:將編號最小的葉子結點刪掉,將與葉子結點相鄰的點加入prufer數列

prufer數列轉樹:對於集合g=每次找出不在當前prufer數列裡有的最小的元素x

與prufer數列的首項連邊,刪除首項與x,直到剩下兩個元素連邊...

結點i的度為x,那麼i出現的次數為x-1

對於i號點度數為d[i]的 無根樹 樹的種數有 (n - 2) ! / ( (d1 - 1)! (d2 - 1)! ……(dn - 1)!

參考會爆long long 分解質因數

**:

#include#include

#define over printf("0\n")

#define end return 0

using

namespace

std;

int n,x,ok,cnt[222

];long

long ans=1

;void chai(int x,int

y) }

if(x>1)cnt[x]+=y;

}int

main()

for(int j=2;j<=x-1;j++)chai(j,-1

); }

if(ok!=n-2

)

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

for(int j=1;j<=cnt[i];j++)

ans=ans*i;

printf(

"%lld\n

",ans);

return0;

}

題解 P2290 HNOI2004 樹的計數

乙個有 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序列對應乙個無根樹,如果...

洛谷 P1437 HNOI2004 敲磚塊

在乙個凹槽中放置了 n 層磚塊 最上面的一層有n 塊磚,從上到下每層依次減少一塊磚。每塊磚 都有乙個分值,敲掉這塊磚就能得到相應的分值,如下圖所示。14 15 4 3 23 33 33 76 2 2 13 11 22 23 31如果你想敲掉第 i 層的第j 塊磚的話,若i 1,你可以直接敲掉它 若i...

洛谷 P2292 HNOI2004 L語言

ac自動機 dp 洛谷這題資料加強之後用bfs t了最後一兩個點 用了乙個dp陣列做轉移 注意一下字串下標的偏移 因為有了dp陣列 存下trie樹上的結尾結點的字串長度 注意一下ac自動機的空間和dp陣列的空間 其他就沒啥了 include include include include inclu...