正题
题目大意:https://www.luogu.org/problem/P2290
题目大意
一棵树无根树第iii个点的度数为did_idi,求树的数量。
解题思路
更具pruferpruferprufer序列的推论我们可以知道答案就是(n−2)!∏i=1n(di−1)!\frac{(n-2)!}{\prod_{i=1}^n(d_i-1)!}∏i=1n(di−1)!(n−2)!
然后这就是有重复重排的式子,所以就是要求n−2n-2n−2个数,iii有di−1d_i-1di−1个,求排列数。
组合数计算即可。
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=151;
ll n,d[N],c[N][N],ans=1,sum;
int main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld",&d[i]),sum+=d[i]-1;if(sum!=n-2){printf("0");return 0;}c[0][0]=1;for(ll i=0;i<=n;i++)for(ll j=1;j<=i;j++)c[i][j]=c[i-1][j-1]+c[i-1][j];sum=0;for(ll i=1;i<=n;i++)ans*=c[n-sum-1][d[i]],sum+=d[i]-1;printf("%lld",ans);
}