CodeCraft-22 and Codeforces Round #795 (Div. 2) F. K-Set Tree
题目链接
题意
给定一个树,f(r,S)f(r,S)f(r,S) 表示该树以 rrr 为根,节点 VVV 的子集 ∣S∣=k|S|=k∣S∣=k,包含 SSS 的最小子树的大小。求所有 f(r,S)f(r,S)f(r,S)
题解
对每个节点计算贡献。如下图节点 444,产生的贡献为:444 为根,其他节点选 kkk 个,且其祖先为 444;区域 AAA 的节点为根,其他节点选 kkk 个,且其祖先为 444;区域B的节点为根,其他节点选 kkk 个,且其祖先为 444…
如果以 444 为根,其他节点选 kkk 个,且祖先为 444,方案数 tottottot 计算:
C(sz[x]+sz[y],k)−C(sz[x],k)−C(sz[y],k)C(sz[x]+sz[y],k)-C(sz[x],k)-C(sz[y],k)C(sz[x]+sz[y],k)−C(sz[x],k)−C(sz[y],k)
不断对子树进行合并,上面公式的解释:两棵子树中选 kkk 个减两棵子树分别单独选 kkk 个。
而对非自身为根的方案数计算:
tot−(C(n,k)−C(sz[y],k)−C(n−sz[y],k))tot-(C(n,k)-C(sz[y],k)-C(n-sz[y],k))tot−(C(n,k)−C(sz[y],k)−C(n−sz[y],k))
上面合并的逆
代码
#include<bits/stdc++.h>
#define LL long long
#define pb push_back
using namespace std;
const int N=2e5+9,mod=1e9+7;
int n,k;
LL ans;
int sz[N];
LL fac[N],inv[N];
vector<int>e[N];
LL ksm(LL x,LL y)
{LL res=1;while(y){if(y&1) res=res*x%mod;x=x*x%mod; y>>=1;}return res;
}
LL C(int x,int y)
{if(y>x) return 0;if(x==y) return 1;return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
void dfs(int x,int fa)
{sz[x]=1;LL tot=C(1,k);for(int y:e[x]){if(y==fa) continue;dfs(y,x);tot=(tot+C(sz[x]+sz[y],k)-C(sz[x],k)-C(sz[y],k))%mod;sz[x]+=sz[y];}ans=(ans+tot*sz[x]%mod*(n-sz[x])%mod)%mod; //区域A为根的贡献tot=(tot+C(n,k)-C(sz[x],k)-C(n-sz[x],k))%mod;ans=(ans+tot*n%mod)%mod; //x为根的贡献for(int y:e[x]){if(y==fa) continue;LL res=((tot-(C(n,k)-C(sz[y],k)-C(n-sz[y],k)))%mod+mod)%mod;ans=(ans+res*(n-sz[y])%mod*sz[y]%mod)%mod; //孩子为根的贡献}
}
int main()
{ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);cin>>n>>k;for(int i=1,x,y;i<n;i++){cin>>x>>y;e[x].pb(y); e[y].pb(x);}fac[0]=1;for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%mod,inv[i]=ksm(fac[i],mod-2);dfs(1,0);cout<<(ans%mod+mod)%mod<<"\n";return 0;
}
CodeCraft-22 and Codeforces Round #795 (Div. 2) F. K-Set Tree相关推荐
- CodeCraft-22 and Codeforces Round #795 (Div. 2)
CodeCraft-22 and Codeforces Round #795 (Div. 2) A. Beat The Odds 题意: 给定一个序列a1,a2,-,an,找出要从该序列中移除的最小元 ...
- Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...
- Codeforces Round #644 (Div. 3) F.Spy-string
Codeforces Round #644 (Div. 3) F.Spy-string 题目链接 You are given n strings a1,a2,-,an: all of them hav ...
- Codeforces Round #849 (Div. 4) F. Range Update Point Query
Codeforces Round #849 (Div. 4) F. Range Update Point Query 题目大意: 给一串数字,有两个操作: 操作1:将 l − r l-r l−r 的数 ...
- Codeforces Round #538 (Div. 2) F. Please, another Queries on Array? 线段树 + 欧拉函数
传送门 文章目录 题意: 思路: 题意: 给你一个序列aaa,你需要实现两种操作: (1)(1)(1) 将[l,r][l,r][l,r]的aia_iai都乘rrr. (2)(2)(2) 求ϕ(∏i= ...
- Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色
传送门 文章目录 题意: 思路: 题意: 给你一个n∗mn*mn∗m的矩形,包含...和XXX,你有两种颜色,你需要给...染色使得每个XXX上下左右相邻的...其两种颜色个数相同,输出一种合法方案. ...
- Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学
传送门 文章目录 题意: 思路: 题意: 思路: 考虑最终的序列是什么鸭子的,首先序列肯定单调不降,也就是a1≤a2≤a3≤...≤ana_1\le a_2\le a_3\le ...\le a_na ...
- Codeforces Round #585 (Div. 2) F. Radio Stations 2-sat + 神仙建模
传送门 文章目录 题意: 思路: 题意: 你现在有ppp种电台,有nnn对关系(x,y)(x,y)(x,y)代表xxx电台或yyy电台中至少有一个,mmm对关系(x,y)(x,y)(x,y)代表xxx ...
- Codeforces Round #453 (Div. 1) D. Weighting a Tree 构造 + dfs树
传送门 文章目录 题意: 思路: 题意: 给你一颗nnn个点的图,每个点都有一个点权cic_ici,要求你给每个边赋一个权值kik_iki,要求对于每个点与他相连的边的权值之和等于这个点的点权ci ...
最新文章
- 【今晚7点】:圆桌PI回归 继续聊聊开源的故事
- windows无法启动oracleremexecservice服务_Windows下MySQL无法启动万能解决方案
- 功能测试常用6种方法_16种常用的数据分析方法聚类分析
- mysql盲注学习-1
- JavaFX 2中的PopupMenu
- Filter过滤器实现同一地址手机和电脑页面不同
- mysql 种子表_mysql之3种子查询
- Python:每日一题008
- 软件推荐,强力卸载软件geek uninstaller
- 识别到硬盘 计算机不显示盘符,Win10系统下移动硬盘可以识别但是不显示盘符的解决方法...
- ffmpeg音频格式转换
- 个人总结---微信抢票应用
- 安徒生---海的女儿
- 笨方法学python 习题34
- python tornado异步_python tornado异步性能测试
- 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)
- 【产品经理】 产品进阶之路(二):如何为失明的人设计一款钟表
- android 高仿美团,Android 仿美团、大众点评团购详情UI
- commvault备份mysql_CommVault备份到华为云对象存储实践
- 详解FLETA的Proof-of-Formulation共识算法
热门文章
- 《数学物理方程》期末复习(华工)
- 《零基础入门学习Python》第088讲:Pygame:摩擦摩擦
- 微信小程序-生命周期
- java计算机毕业设计家乡旅游文化推广网站源码+mysql数据库+系统+lw文档+部署
- 从”fatal error C1034: 不包括路径集“学到的内容
- C语言计算函数执行的时间,测试函数性能
- 归并排序 C语言描述
- MATLAB自定义函数 计算三元函数矢量符号微分
- VIM编辑文件以及保存
- python延时执行函数_python 限制函数执行时间,自己实现timeout的实例