[bzo1211][HNOI2004]樹的計數_prufer序列
阿新 • • 發佈:2018-12-30
樹的計數 bzoj-1211 HNOI-2004
題目大意:題目連結。
註釋:略。
想法:
prufer序列有一個性質就是一個數在prufer序列中出現的次數等於這個prufer序列生成的樹中它的度數-1。
故此我們就是要求$C_{n-2}^{d_1-1}\times C_{n-2-d_1+1}^{d_2-1}\times \cdots \times C_{d_n-1}^{d_n-1}$。
隨便搞搞就行了。
Code:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define M 160 using namespace std; typedef long long ll; int n,sum,d[M]; int cnt[M]; ll ans=1; ll Quick_Power(ll x,int y) { ll re=1; while(y) { if(y&1)re*=x; x*=x; y>>=1; } return re; } void Decomposition(int x,int flag) { int i; for(i=2;i*i<=x;i++) while(x%i==0) cnt[i]+=flag,x/=i; if(x^1) cnt[x]+=flag; } int main() { int i,j; cin>>n; for(i=2;i<=n-2;i++) Decomposition(i,1); for(i=1;i<=n;i++) { scanf("%d",&d[i]); if(!d[i]&&n!=1) { puts("0"); return 0; } sum+=d[i]-1; for(j=2;j<=d[i]-1;j++) Decomposition(j,-1); } if(sum!=n-2) { puts("0"); return 0; } for(i=1;i<=n-2;i++) if(cnt[i]) ans*=Quick_Power(i,cnt[i]); cout<<ans<<endl; }
小結:prufer序列好像只有裸題誒.....