輸入格式:
輸入檔案第一行是乙個正整數n,表示樹有n個結點。第二行有n個數,第i個數表示di,即樹的第i個結點的度數。其中1<=n<=150,輸入資料保證滿足條件的樹不超過10^17個。
輸出格式:
輸出滿足條件的樹有多少棵。
輸入樣例#1:
4輸出樣例#1:2 1 2 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...