bzoj1211 [HNOI2004]树的计数 prufer序列

xiaoxiao2021-02-28  70

prufer序列,组合数部分暴力分解质因数即可。

#include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<cmath> #include<algorithm> #include<set> #include<map> #include<queue> #include<stack> #include<vector> #include<bitset> using namespace std; typedef long long LL; int n; int a[210]; int b[210]; void work(int x,int f) { for (int i=2;i<=x;i++) { if (x%i==0) { while (x%i==0) b[i]+=f,x/=i; } } } void cal(int x,int y) { for (int i=1;i<=x;i++) work(i,1); for (int i=1;i<=y;i++) work(i,-1); for (int i=1;i<=x-y;i++) work(i,-1); } int main() { scanf("%d",&n); int sum=0; for (int i=1;i<=n;i++) { scanf("%d",&a[i]),sum+=a[i]; if (a[i]<=0&&n>1) return printf("0\n"),0; } if (sum!=2*n-2) return printf("0\n"),0; if (n==1) return printf("1\n"),0; sum=n-2; for (int i=1;i<=n;i++) cal(sum,a[i]-1),sum-=a[i]-1; LL ans=1; for (int i=1;i<=n;i++) for (int j=1;j<=b[i];j++) ans*=(LL)i; cout<<ans<<endl; return 0; }
转载请注明原文地址: https://www.6miu.com/read-54257.html

最新回复(0)