考虑树上的每条边对答案的贡献
--- 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 ;
}

51nod 1677的更多相关文章

  1. 51Nod 1677 treecnt

    一道比较基础的计数题,还是一个常用的单独计算贡献的例子. 首先看题目和范围,暴力枚举肯定是不可行的,而且\(O(n\ logn)\)的算法貌似很难写. 那我们就来想\(O(n)\)的吧,我们单独考虑每 ...

  2. 51nod 1677 treecnt(思维)

    题意: 给定一棵n个节点的树,从1到n标号.选择k个点,你需要选择一些边使得这k个点通过选择的边联通,目标是使得选择的边数最少. 现需要计算对于所有选择k个点的情况最小选择边数的总和为多少. 考虑每条 ...

  3. 胡小兔的OI日志3 完结版

    胡小兔的 OI 日志 3 (2017.9.1 ~ 2017.10.11) 标签: 日记 查看最新 2017-09-02 51nod 1378 夹克老爷的愤怒 | 树形DP 夹克老爷逢三抽一之后,由于采 ...

  4. Luogu P3177 [HAOI2015]树上染色

    一道有机结合了计数和贪心这一DP两大考点的神仙题,不得不说做法是很玄妙. 首先我们很容易想到DP,设\(f_{i,j}\)表示在以\(i\)为根节点的子树中选\(j\)个黑色节点的最大收益值. 然后我 ...

  5. 【51Nod 1244】莫比乌斯函数之和

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 模板题... 杜教筛和基于质因子分解的筛法都写了一下模板. 杜教筛 ...

  6. 51Nod 1268 和为K的组合

    51Nod  1268  和为K的组合 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使 ...

  7. 51Nod 1428 活动安排问题

    51Nod   1428  活动安排问题 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 1428 活 ...

  8. 51Nod 1278 相离的圆

    51Nod 1278 相离的圆 Link: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1278 1278 相离的圆 基 ...

  9. 【51Nod 1501】【算法马拉松 19D】石头剪刀布威力加强版

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1501 dp求出环状不连续的前缀和,剩下东西都可以算出来,比较繁琐. 时间 ...

随机推荐

  1. 串口控制RGB灯程序

    实验目的: 通过上位机给串口发送数据(字符); STM32收到数据进入中断程序原封不动返回上位机,并且根据收到的信息产出相应的进行操作.(1- led_on  2 – ledoff...); 源码   ...

  2. MarkDown 语法大全查询

    目录 1. 斜体和粗体 2. 分级标题 3. 超链接 3.1. 行内式 3.2. 参考式 3.3. 自动链接 4. 锚点 5. 列表 5.1. 无序列表 5.2. 有序列表 5.3. 定义型列表 5. ...

  3. # JDK7+ MethodHandle

    简单例子 import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; import java.lang.i ...

  4. mysql 创建用户,授权,查询用户等

    MySQL创建用户与授权 一. 创建用户 命令: CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明: username:你将创建的用 ...

  5. vulnhub攻略

    https://www.vulnhub.com/entry/21ltr-scene-1,3/ 这个靶机国内https://www.cnblogs.com/hack404/p/11423228.html ...

  6. ASE19团队项目beta阶段Backend组 scrum2 记录

    本次会议于12月5日,19:00在微软北京西二号楼sky garden召开,持续10分钟. 与会人员:Zhikai Chen, Lihao Ran, Xin Kang 请假人员:Hao Wang 每个 ...

  7. IntelliJ IDEA常用快捷键整合

    一.视图查看 Ctrl+F12 查看file,method结构图.类继承机构图 (不知道方法结构,Ctrl+F12一下,方法,参数,返回值,一清二楚的展现出来) Ctrl+shift+Alt+U   ...

  8. ndk学习之C语言基础复习----结构体、共用体与C++开端

    自己实现sprintf功能: 关于C中的系统函数sprintf在上次[https://www.cnblogs.com/webor2006/p/7545627.html]学习中已经用到过了,这里再来回顾 ...

  9. Python自动化测试PO模式

    页面元素定位信息 页面元素定位信息文件 [leadscloud_login] input_user_name = xpath>//*[@id='main']/div/div[2]/div[2]/ ...

  10. Hive系统函数之collect_list和collect_set

    转自:https://www.cnblogs.com/cc11001100/p/9043946.html Hive中collect相关的函数有collect_list和collect_set. 它们都 ...