Cnm%(个人模版)
时间:2022-05-07
本文章向大家介绍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("%I64dn",(ans+MOD)%MOD);
75 }
76 //prLLf("%I64dn",C(5,2));
77 }
- HTTP协议漫谈
- 关于 Android N 那些你不知道的事儿
- golang实现ping命令
- socket编程小问题:地址已经被使用——Address already in use
- 如何使用golang实现操作键盘按键
- 黑科技:程序员如何打造属于自己的分体键盘
- Go语言实现socket实例
- go语言实现sqrt的方法
- Go语言实现set
- Docker新手入门实战教程
- Python远程控制模块paramiko遇到的问题及解决记录
- Windows下bat批处理脚本使用telnet批量检测远程端口小记
- WordPress集成PHP缩略图,并开启Nginx缓存的方法
- 分享几个WordPress本地缓存gravatar评论头像的方案
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android中menu使用详解
- SimpleCommand框架介绍以及简单使用(一)
- Android开发中使用achartengine绘制各种图表的方法
- Android开发中Listview动态加载数据的方法示例
- Android自定义实现顶部粘性下拉刷新效果
- Android开发使用自定义view实现ListView下拉的视差特效功能
- Android打造炫酷进度条效果
- Android开发实现自定义新闻加载页面功能实例
- Android下Activity间通信序列化过程中的深浅拷贝浅析
- Android升级支持库版本遇到的两个问题详解
- Android开发使用Drawable绘制圆角与圆形图案功能示例
- Android开发中自定义ProgressBar控件的方法示例
- Android 使用自定义RecyclerView控件实现Gallery效果
- Android开发中GridView用法示例
- React Native中Android物理back键按两次返回键即退出应用