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