51nod 1806 wangyurzee的树

来源:互联网 发布:唯一网络 编辑:程序博客网 时间:2024/06/05 18:08

purfer sequence的应用

#include<bits/stdc++.h>using namespace std;const long long mod=1e9+7;const int MAXN=1000100;long long fac[MAXN],inv[MAXN];long long powmod(long long x,long long p){long long ret=1;while(p){if(p&1)ret=ret*x%mod;p>>=1;x=x*x%mod;}return ret;}int main(){long long n,m,u[20],d[20],vis[20],i,j,cnt,sum,t,tmp,ans,flag;fac[0]=1;for(i=1;i<MAXN;i++){fac[i]=fac[i-1]*i%mod;}inv[MAXN-1]=powmod(fac[i-1],mod-2);for(i=MAXN-2;i>=0;i--)inv[i]=inv[i+1]*(i+1)%mod;while(~scanf("%lld%lld",&n,&m)){for(i=0;i<m;i++)scanf("%lld%lld",&u[i],&d[i]);if(n==1){if(m)printf("0\n");elseprintf("1\n");continue;}ans=powmod(n,n-2);for(i=1;i<(1<<m);i++){memset(vis,0,sizeof(vis));flag=0;cnt=sum=0;t=1;for(j=0;j<m;j++){if(i&(1<<j)){if(vis[u[j]])flag=1;cnt++;sum+=d[j]-1;vis[u[j]]=1;t=t*inv[d[j]-1]%mod;}}if(flag||sum>n-2)continue;tmp=fac[n-2]*inv[n-2-sum]%mod*powmod(n-cnt,n-2-sum)%mod*t%mod;if(cnt&1)ans=(ans-tmp+mod)%mod;elseans=(ans+tmp)%mod; }printf("%lld\n",ans);}}


原创粉丝点击