题目链接

题意

给定一个树,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相关推荐

  1. CodeCraft-22 and Codeforces Round #795 (Div. 2)

    CodeCraft-22 and Codeforces Round #795 (Div. 2) A. Beat The Odds 题意: 给定一个序列a1,a2,-,an,找出要从该序列中移除的最小元 ...

  2. Codeforces Round #699 (Div. 2) F - AB Tree(贪心、树上DP)超级清晰,良心题解,看不懂来打我 ~

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #699 (Div. 2) F - AB Tree Problem ...

  3. 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 ...

  4. 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 的数 ...

  5. 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= ...

  6. Codeforces Round #742 (Div. 2) F. One-Four Overload 构造 + 二分图染色

    传送门 文章目录 题意: 思路: 题意: 给你一个n∗mn*mn∗m的矩形,包含...和XXX,你有两种颜色,你需要给...染色使得每个XXX上下左右相邻的...其两种颜色个数相同,输出一种合法方案. ...

  7. Codeforces Round #740 (Div. 2) F. Top-Notch Insertions 线段树 / 平衡树 + 组合数学

    传送门 文章目录 题意: 思路: 题意: 思路: 考虑最终的序列是什么鸭子的,首先序列肯定单调不降,也就是a1≤a2≤a3≤...≤ana_1\le a_2\le a_3\le ...\le a_na ...

  8. 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 ...

  9. Codeforces Round #453 (Div. 1) D. Weighting a Tree 构造 + dfs树

    传送门 文章目录 题意: 思路: 题意: 给你一颗nnn个点的图,每个点都有一个点权cic_ici​,要求你给每个边赋一个权值kik_iki​,要求对于每个点与他相连的边的权值之和等于这个点的点权ci ...

最新文章

  1. 【今晚7点】:圆桌PI回归 继续聊聊开源的故事
  2. windows无法启动oracleremexecservice服务_Windows下MySQL无法启动万能解决方案
  3. 功能测试常用6种方法_16种常用的数据分析方法聚类分析
  4. mysql盲注学习-1
  5. JavaFX 2中的PopupMenu
  6. Filter过滤器实现同一地址手机和电脑页面不同
  7. mysql 种子表_mysql之3种子查询
  8. Python:每日一题008
  9. 软件推荐,强力卸载软件geek uninstaller
  10. 识别到硬盘 计算机不显示盘符,Win10系统下移动硬盘可以识别但是不显示盘符的解决方法...
  11. ffmpeg音频格式转换
  12. 个人总结---微信抢票应用
  13. 安徒生---海的女儿
  14. 笨方法学python 习题34
  15. python tornado异步_python tornado异步性能测试
  16. 排序算法(冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序)
  17. 【产品经理】 产品进阶之路(二):如何为失明的人设计一款钟表
  18. android 高仿美团,Android 仿美团、大众点评团购详情UI
  19. commvault备份mysql_CommVault备份到华为云对象存储实践
  20. 详解FLETA的Proof-of-Formulation共识算法

热门文章

  1. 《数学物理方程》期末复习(华工)
  2. 《零基础入门学习Python》第088讲:Pygame:摩擦摩擦
  3. 微信小程序-生命周期
  4. java计算机毕业设计家乡旅游文化推广网站源码+mysql数据库+系统+lw文档+部署
  5. 从”fatal error C1034: 不包括路径集“学到的内容
  6. C语言计算函数执行的时间,测试函数性能
  7. 归并排序 C语言描述
  8. MATLAB自定义函数 计算三元函数矢量符号微分
  9. VIM编辑文件以及保存
  10. python延时执行函数_python 限制函数执行时间,自己实现timeout的实例