考虑树上的每条边对答案的贡献
--- x ----y ---
若 x 左边有 a2 个点,y 的右边有 a3 个点
那么改边对答案的贡献为 C(n, k) - C(a2, k) - C(a3, k)
快速幂求逆元计算组合数
注意:计算C(n, m)时, 若 m > n 返回 0

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> #define gc getchar()
#define ULL unsigned long long
#define LL long long inline int read() {
int x = ; char c = gc;
while(c < '' || c > '') c = gc;
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x;
} const int N = 1e5 + , Mod = 1e9 + ; int head[N], cnt;
struct Node {int u, v, nxt;} G[N << ];
int size[N], deep[N];
int n, k;
ULL fac[N]; inline void Add(int u, int v) {G[++ cnt].v = v; G[cnt].nxt = head[u]; head[u] = cnt;} void Dfs(int u, int fa, int dep) {
size[u] = , deep[u] = dep;
for(int i = head[u]; ~ i; i = G[i].nxt) {
int v = G[i].v;
if(v == fa) continue;
Dfs(v, u, dep + );
size[u] += size[v];
}
} ULL Ksm(ULL a, ULL b) {
ULL ret = ;
while(b) {
if(b & ) ret = (ret * a) % Mod;
a = (a * a) % Mod;
b >>= ;
}
return ret;
} Node E[N]; inline ULL C(int n_, int m_) {
if(m_ > n_) return ;
ULL x = (fac[m_] * fac[n_ - m_]) % Mod;
return (ULL) (fac[n_] * Ksm(x, Mod - )) % Mod;
} int main() {
n = read(), k = read();
fac[] = fac[] = ;
for(int i = ; i <= n; i ++) fac[i] = (fac[i - ] * i) % Mod;
for(int i = ; i <= n; i ++) head[i] = -;
for(int i = ; i < n; i ++) {
int u = read(), v = read(); Add(u, v), Add(v, u);
E[i].u = u, E[i].v = v;
}
Dfs(, , );
LL a1 = C(n, k);
LL Answer = ;
for(int i = ; i < n; i ++) {
int x = E[i].u, y = E[i].v;
if(deep[x] < deep[y]) std:: swap(x, y);
int siz1 = size[x], siz2 = n - siz1;
LL a2 = C(siz1, k), a3 = C(siz2, k);
Answer = (Answer + (a1 - a2 - a3) % Mod) % Mod;
}
while(Answer < ) Answer += Mod;
std:: cout << Answer;
return ;
}

最新文章

  1. 【荐】PHP操作MongoDB GridFS 存储文件,如图片文件
  2. Model View Controller
  3. android 文字图片合成
  4. 提取数据用strpos函数比较,预期和实际不符问题解决
  5. java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.MetadataProvider
  6. 解决数据库Operation not allowed when innodb_forced_recovery &gt; 0
  7. hdu 5187 高速幂高速乘法
  8. “Dynamic Web Module 3.0 requires Java 1.6 or newer.”错误 (转别人)
  9. 3.MQTT paho
  10. visual studio no editoroptiondefinition export found for the given option nam
  11. VMare Workstation 12 安装 AsteriskNow freePBX
  12. win2016 配置IIS 和mysql5.7 迁移数据表的两个小坑
  13. Mac os的使用
  14. 在Tomcat7.0中设置默认服务器和不加端口名访问
  15. 深度学习原理与框架-Tensorflow基本操作-实现线性拟合
  16. sudo: add-apt-repository: command not found
  17. oracle 分组取第一行数据 ,查询sql语句
  18. xcode 在哪里新建category、protocol等文件
  19. 74.VS2013和opencv3.1.0安装教程
  20. Python基础笔记系列十一:标准输入输出、文件读写和指针等操作

热门文章

  1. Docker相关环境全套安装文档兼小技能
  2. Swiper 轮播插件 之 动态加载无法滑动
  3. Abp 领域事件简单实践 &lt;三&gt; 自定义事件
  4. 开启HSTS让浏览器强制跳转HTTPS访问
  5. 分布式事务(ACID特性、CAP定律)
  6. 【php socket通讯】php实现http服务
  7. Recastnavigation 创建 off-mesh link 的潜规则
  8. wangeditor富编辑器在node和vue前后台分离的使用
  9. 解决wpscan无法更新
  10. github安全整理