CF981H K Paths
一道不错的分治ntt题目
题目稍微转化一下,就是所有k条链的存在交,并且交的部分都被覆盖k次
所以一定是两个点,之间路径选择k次,然后端点两开花
f[x]表示x子树内往下延伸k条链(可以停在x)的方案数(有标号)
每个子树选择一个或者不选择,最多一共选择k个,dp是O(n^2)的,
考虑生成函数,其实就是:
而
统计答案?
直接两两点对f相乘肯定不行,因为f仅仅是子树
考虑枚举x作为lca统计
如果是拐弯的链,树形DP即可。
而如果是直上直下的链,
对于不同子树,x的选择是扣去这个子树,还可以往上选择
分治NTT的经典问题
const int N=1e5+;
int n,k;
int jie[N],inv[N];
int A(int n,int m){
if(n<||m<||n<m) return ;
return mul(jie[n],inv[n-m]);
}
int val[N],si[N];
void divi(int l,int r,Poly &f,Poly &g){
// cout<<" divi "<<l<<" "<<r<<endl;
if(l==r){
g.resize();g[]=val[l];
f.resize();f[]=;f[]=si[l];
return;
}
Poly lf,lg,rf,rg;
int mid=(l+r)>>;
divi(l,mid,lf,lg);
divi(mid+,r,rf,rg);
f=lf*rf;
g=(lf*rg)+(lg*rf);
}
int f[N],sum[N],son[N];
int ans,sz[N];
struct node{
int nxt,to;
}e[*N];
int hd[N],cnt;
void add(int x,int y){
e[++cnt].nxt=hd[x];
e[cnt].to=y;
hd[x]=cnt;
}
void dfs(int x,int fa){
// cout<<" xx "<<x<<" fa "<<fa<<endl;
sz[x]=;
int pre=;
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa) continue;
++son[x];
dfs(y,x);
sz[x]+=sz[y];
sum[x]=ad(sum[x],sum[y]);
ans=ad(ans,mul(pre,sum[y]));
pre=ad(pre,sum[y]);
}
if(son[x]){
Poly F,G;
int ct=;
for(reg i=hd[x];i;i=e[i].nxt){
int y=e[i].to;
if(y==fa) continue;
val[++ct]=sum[y];
si[ct]=sz[y];
}
divi(,ct,F,G);
Poly T;
T.resize();
T[]=;T[]=n-sz[x];
G=G*T;
for(reg i=;i<=min(k,son[x]);++i){
// cout<<"F["<<i<<"] "<<F[i]<<" G["<<i<<"] "<<G[i]<<endl;
ans=ad(ans,mul(A(k,i),G[i]));
f[x]=ad(f[x],mul(A(k,i),F[i]));
}
sum[x]=ad(sum[x],f[x]);
}else{
f[x]=;sum[x]=;
}
// cout<<" return "<<x<<" f "<<f[x]<<endl;
}
int main(){
rd(n);rd(k);
if(k==){
ans=(ll)n*(n-)/%mod;
ot(ans);return ;
}
jie[]=;
for(reg i=;i<=k;++i) jie[i]=mul(jie[i-],i);
inv[k]=qm(jie[k],mod-);
for(reg i=k-;i>=;--i) inv[i]=mul(inv[i+],i+); int x,y;
for(reg i=;i<n;++i){
rd(x);rd(y);add(x,y);add(y,x);
}
dfs(,);
ot(ans);
return ;
} }
signed main(){
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/4/8 18:57:00
*/
CF981H K Paths的更多相关文章
- 多目标跟踪笔记一:Finding the Best Set of K Paths Through a Trellis With Application to Multitarget Tracking
Abstract 本文提出一种寻找K最优路径的方法. k最优路径的定义:1.the sum of the metrics of all k paths in the set is minimized. ...
- Codeforces 981H:K Paths
传送门 考虑枚举一条路径 \(u,v\),求出所有边经过它的答案 只需要求出 \(u\) 的子树内选出 \(k\) 个可以重复的点,使得它们到 \(u\) 的路径不相交 不难发现,就是从 \(u\) ...
- 多项式细节梳理&模板(多项式)
基础 很久以前的多项式总结 现在的码风又变了... FFT和NTT的板子 typedef complex<double> C; const double PI=acos(-1); void ...
- 性能测试之-wrk(转)
转载地址:http://zjumty.iteye.com/blog/2221040 测试先行是软件系统质量保证的有效手段. 在单元测试方面, 我们有非常成熟的 xUnit 方案. 在集成测试方面, 我 ...
- Max Flow
Max Flow 题目描述 Farmer John has installed a new system of N−1 pipes to transport milk between the N st ...
- 使用wrk进行性能测试
1 wrk介绍 wrk是一款现代化的HTTP性能测试工具,即使运行在单核CPU上也能产生显著的压力.它融合了一种多线程设计,并使用了一些可扩展事件通知机制,例如epoll and kqueue. 一个 ...
- USACO December 铂金Maxflow
USACO 2015 December Contest, Platinum Problem 1. Max Flow Farmer John has installed a new system of ...
- wrk -- 小巧轻盈的 http 性能测试工具.
标签: wrk http 性能 | 发表时间:2015-06-21 00:55 | 作者:zjumty 出处:http://www.iteye.com 测试先行是软件系统质量保证的有效手段. 在单元测 ...
- Codeforces Round #114 (Div. 1) E. Wizards and Bets 高斯消元
E. Wizards and Bets 题目连接: http://www.codeforces.com/contest/167/problem/E Description In some countr ...
随机推荐
- java中 &&与& ||与| 的区别
public class Demo { public static void main(String[] args) { int i = 5; int j = 3; // || 与 | 的区别 boo ...
- 03_Spring Bean的装配模式_基于Annotation配置方式
前言 在Spring中尽管使用XML配置文件可以实现Bean的装配工作,但如果应用中Bean的数量较多,会导致XML配置文件过于臃肿,从而给维护和升级带来一定的困难.从JDK 5开始提供了名为Anno ...
- 04_Hibernate检索方式
一.Hibernate检索方式概述 OID检索方式:按照对象的OID来检索对象(get/load) HQL检索方式:使用面向对象的HQL查询语言 QBC检索方式:使用QBC(Query By Crit ...
- 01_jQuery初识
1.为什么要学习jQuery?做同样的事情,jQuery写起来极其简练(write less , do more) 2.jQuery是什么?jQuery相当于Python的第三方模块,原生JS DOM ...
- HDU--2191 汶川地震购米(多重背包)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2191 分析:有资金n元,而市场有m种大米,每种大米价格不等,重量不等,数量不等, 并且只能整袋购买.如何用 ...
- linux使用wget
wget is a Linux command-line utility for retrieving files from the web, via HTTP, HTTPS and FTP prot ...
- hdu4764
hdu4764bash博弈主要是找准必胜状态,以及好好理解题意.这里的必胜状态是n-1,虽然是写的数比上一个大1到k,但是相当于这个人拿1到k,然后是累加的效果 #include<iostrea ...
- 微信回调校验失败兼容php7
今天在移动微信支付的代码的时候,发现校验失败,之前好好的,一点点打印了,顺着微信校验程序打印看结果,发现 $xml = $GLOBALS['HTTP_RAW_POST_DATA'];; 接收到的数据 ...
- spark dataframe 将null 改为 nan
由于我要叠加rdd某列的数据,如果加数中出现nan,结果也需要是nan,nan可以做到,但我要处理的数据源中的nan是以null的形式出现的,null不能叠加,而且我也不能删掉含null的行,于是我用 ...
- 善用 NuGet 程序包管理器控制台
每种集成开发环境都会提供扩展包的下载与安装,VS (微软可视化集成开发环境) 下的叫程序包管理控制台,我们把他叫做<牛干 程序包管理控制台>. 在 工具=>NuGet 程序包管理器= ...