BZOJ 1211: [HNOI2004]树的计数 prufer编码
2017-06-15 21:32
309 查看
1211: [HNOI2004]树的计数
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2526 Solved: 901
[Submit][Status][Discuss]
Description
一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个结点vi的度数为di,问满足这样的条件的不同的树有多少棵。给定n,d1, d2, …, dn,编程需要输出满足d(vi)=di的树的个数。Input
第一行是一个正整数n,表示树有n个结点。第二行有n个数,第i个数表示di,即树的第i个结点的度数。其中1<=n<=150,输入数据保证满足条件的树不超过10^17个。Output
输出满足条件的树有多少棵。Sample Input
42 1 2 1
Sample Output
2Cayley定理推广之后
n个节点的度依次为D1, D2, …, Dn的无根树共有(n-2)! / [ (D1-1)!(D2-1)!..(Dn-1)! ]个
这题没有mod数,所以分解质因数做
不要忘记各种鬼畜的特判哦
#include<cmath> #include<ctime> #include<cstdio> #include<cstring> #include<cstdlib> #include<complex> #include<iostream> #include<algorithm> #include<iomanip> #include<vector> #include<string> #include<bitset> #include<queue> #include<map> #include<set> using namespace std; typedef long long ll; inline int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch<='9'&&ch>='0'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();} return x*f; } const int N=200; int a ,cnt ,d ; inline void dive(int x,int opt) { for(int i=2;(i*i)<=x;i++) while(x%i){x/i;cnt[i]+=opt;} if(x>1)cnt[x]+=opt; } ll qpow(ll x,ll y) {ll ans=1;for(int i=1;i<=y;i++){ans*=x;}return ans;} int main() { int n=read();int sum=0; for(int i=1;i<=n;i++){d[i]=read();sum+=d[i];if(!d[i]&&n>1){puts("0");return 0;}} if(sum!=n*2-2){puts("0");return 0;} if(n<=2){puts("1");return 0;} for(int i=2;i<=n-2;i++)dive(i,1); for(int i=1;i<=n;i++){for(int j=2;j<=d[i]-1;j++)dive(j,-1);} ll ans=1;for(int i=2;i<=n;i++){ans*=qpow(ll(i),ll(cnt[i]));} printf("%lld\n",ans); return 0; } /* 4 2 1 2 1 2 */
相关文章推荐
- bzoj1211: [HNOI2004]树的计数 prufer编码
- bzoj 1211: [HNOI2004]树的计数 prufer编码
- bzoj1211 [HNOI2004]树的计数 prufer序列+组合数
- 【BZOJ1005/1211】[HNOI2008]明明的烦恼/[HNOI2004]树的计数 Prufer序列+高精度
- BZOJ 1211 [HNOI2004] 树的计数
- BZOJ 1211 HNOI2004 树的计数 Prufer序列
- 洛谷 P2290 [HNOI2004]树的计数(bzoj[1211])
- 【BZOJ1211】【HNOI2004】树的计数
- 【BZOJ 1211】 [HNOI2004]树的计数
- BZOJ 1211: [HNOI2004]树的计数
- BZOJ1211 - [HNOI2004]树的计数
- bzoj1211 [HNOI2004]树的计数(prufer序列+组合数学+计数)
- bzoj1211 [HNOI2004]树的计数
- [BZOJ1005][HNOI2008]明明的烦恼&&[BZOJ1211][HNOI2004]树的计数【prufer序列】
- [BZOJ1211][HNOI2004]树的计数(Prufer序列)
- [bzoj]1211: [HNOI2004]树的计数
- 【组合数学】【prufer数列】【HNOI 2004】【bzoj 1211】树的计数
- BZOJ1211: [HNOI2004]树的计数
- bzoj1211: [HNOI2004]树的计数
- 【bzoj1211】 HNOI2004—树的计数