Cnm%(个人模版)
Cnm%:
1 #include<stdio.h> 2 #include<string.h> 3 #include<vector> 4 using namespace std; 5 #define LL __int64 6 #define MOD 1000000007ll 7 const LL mod = 1000000007; 8 const LL N = 100000+5; 9 const LL M=1e5+3; 10 vector<LL >mp[100500]; 11 LL ans; 12 LL n,k; 13 LL vis[100500]; 14 LL fac[100005]; //阶乘 15 LL inv_of_fac[100005]; //阶乘的逆元 16 LL qpow(LL x,LL n) 17 { 18 LL ret=1; 19 for(; n; n>>=1) 20 { 21 if(n&1) ret=ret*x%mod; 22 x=x*x%mod; 23 } 24 return ret; 25 } 26 void init() 27 { 28 fac[1]=1; 29 for(int i=2; i<=M; i++) 30 fac[i]=fac[i-1]*i%mod; 31 inv_of_fac[M]=qpow(fac[M],mod-2); 32 for(int i=M-1; i>=0; i--) 33 inv_of_fac[i]=inv_of_fac[i+1]*(i+1)%mod; 34 } 35 LL C(LL a,LL b) 36 { 37 if(b>a) return 0; 38 if(b==0) return 1; 39 return fac[a]*inv_of_fac[b]%mod*inv_of_fac[a-b]%mod; 40 } 41 //(C(k,n)-C(k,cont)-C(k,n-cont)+MOD)%MOD; 42 LL Dfs(int u) 43 { 44 vis[u]=1; 45 LL cont=1; 46 for(LL int i=0;i<mp[u].size();i++) 47 { 48 LL v=mp[u][i]; 49 if(vis[v]==0) 50 { 51 LL tmp=Dfs(v); 52 ans=(ans+(C(n,k)%MOD-C(tmp,k)%MOD-C(n-tmp,k)%MOD)%MOD+MOD)%MOD; 53 cont+=tmp; 54 } 55 } 56 return cont; 57 } 58 int main() 59 { 60 while(~scanf("%I64d%I64d",&n,&k)) 61 { 62 init(); 63 memset(vis,0,sizeof(vis)); 64 for(LL i=1;i<=n;i++)mp[i].clear(); 65 for(LL i=1;i<=n-1;i++) 66 { 67 LL x,y; 68 scanf("%I64d%I64d",&x,&y); 69 mp[x].push_back(y); 70 mp[y].push_back(x); 71 } 72 ans=0; 73 Dfs(1); 74 printf("%I64d\n",(ans+MOD)%MOD); 75 } 76 //prLLf("%I64d\n",C(5,2)); 77 }
作 者:Angel_Kitty
出 处:https://www.cnblogs.com/ECJTUACM-873284962/
关于作者:阿里云ACE,目前主要研究方向是Web安全漏洞以及反序列化。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!
欢迎大家关注我的微信公众号IT老实人(IThonest),如果您觉得文章对您有很大的帮助,您可以考虑赏博主一杯咖啡以资鼓励,您的肯定将是我最大的动力。thx.
我的公众号是IT老实人(IThonest),一个有故事的公众号,欢迎大家来这里讨论,共同进步,不断学习才能不断进步。扫下面的二维码或者收藏下面的二维码关注吧(长按下面的二维码图片、并选择识别图中的二维码),个人QQ和微信的二维码也已给出,扫描下面👇的二维码一起来讨论吧!!!
欢迎大家关注我的Github,一些文章的备份和平常做的一些项目会存放在这里。