网上做结婚照的网站,设计师学编程能自己做网站吗,网站建设步骤及推广方法,漂亮logo图片题解 首先我们要知道一条性质#xff0c;prufer序列中的某个点出现次数为该点在树中度数-1 感性理解一下#xff0c;其实按照prufer序列求法自己推一下就出来了 设题目里给的度为$d[]$ 先将所有的d-- 然后按照排列组合得出来 这是多重集排列数 首先从n-2中选择d[1]个数是$C_{… 题解 首先我们要知道一条性质prufer序列中的某个点出现次数为该点在树中度数-1 感性理解一下其实按照prufer序列求法自己推一下就出来了 设题目里给的度为$d[]$ 先将所有的d-- 然后按照排列组合得出来 这是多重集排列数 首先从n-2中选择d[1]个数是$C_{n}^{d[1]}$然后再从剩余n-d[1]中选d[2] $C_{n-d[1]}^{d[2]}$依次类推 $C_{n-2}^{d[1]}\times C_{n-2-d[1]}^{d[2]}\times C_{n-2-d[1]-d[2]}^{d[3]}\times ……\times C_{n-2-d[1]-……-d[n-1]}^{d[n]}$ 得到 $\frac{(n-2)!}{\sum\limits_{i1}^{n}d[i]!}$ 高精转移就完了 还是过不了 一些特判 首先该题会有无解的情况 然后当只有一个点时方案数为1 然后当出现度数为0的点时方案数要特殊处理 以下是本人丑陋的代码 #includebits/stdc.h
#define ll long long
#define N 10
#define P 1
using namespace std;
ll n,m,d[20000],cnt0;
bool flag[20000];
struct bignum
{ll n[200000],l;bignum(){l1,memset(n,0,sizeof(n));}void clear(){while(l1!n[l-1]) l--;}void print(){printf(%lld,n[l-1]);for(ll il-2;i0;i--)printf(%0*lld,P,n[i]);printf(\n);}bignum operator (ll x){l0; while(x){n[l]x%N;x/N;}return *this;}bignum operator (bignum x) const{bignum t*this;if(x.lt.l) t.lx.l; for(ll i0;it.l;i){t.n[i]x.n[i];if(t.n[i]N){t.n[i1]t.n[i]/N;t.n[i]%N;}}return t;}bignum operator * (const ll b){bignum c;c.l0;for(ll i0,g0;g||il;i){ll x;if(il)xn[i]*bg;else xg;c.n[c.l]x%N;gx/N;}return c;}bignum operator *(bignum x) const{bignum t*this,tep;tep.lt.lx.l1;for(ll i0;it.l;i)for(ll j0;jx.l;j){tep.n[ij]t.n[i]*x.n[j];}for(ll i0;itep.l;i){tep.n[i1]tep.n[i]/N;tep.n[i]%N;}tep.clear();return tep;}bool operator (bignum x) const{bignum t*this,tep;if(t.l!x.l) return t.lx.l;for(ll it.l-1;i0;i--){if(t.n[i]!x.n[i]) return t.n[i]x.n[i];}return 0;}bool operator (bignum x) const{bignum t*this;if(t.l!x.l) return t.lx.l;for(ll it.l-1;i0;i--){if(t.n[i]!x.n[i]) return t.n[i]x.n[i];}return 0;}bignum operator -(bignum x) const{bignum t*this;if(tx) printf(-),swap(t,x);ll jie0;for(ll i0;it.l;i){t.n[i]-x.n[i];while(t.n[i]0){t.n[i]N;jie;}t.n[i1]-jie;jie0;;}t.clear();return t;}bignum operator /(const ll x){bignum t*this,r;ll tmp0;r.lt.l;for(ll it.l-1;i0;i--){tmpt.n[i];if(tmpx){r.n[i]tmp/x;tmp%x;}tmp*N;}r.clear();return r;}
}ans;
bignum jie(ll x)
{bignum t;t1;for(ll i2;ix;i){tx*i;}return t;
}
int main()
{memset(flag,0,sizeof(flag));ll sum0,you00;scanf(%lld,n);for(ll i1;in;i){scanf(%lld,d[i]);if(d[i])flag[i]1,cnt;else you01;d[i]--,sumd[i];}if(you0n1){cout1endl;return 0;}if(sum!n-2||you0) {cout0endl;return 0;}ans1;for(ll i2;icnt-2;i)ansans*i;for(ll i1;in;i){if(flag[i])for(ll j2;jd[i];j)ansans/j;}ans.print();
} 转载于:https://www.cnblogs.com/znsbc-13/p/11222262.html