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的更多相关文章

  1. 多目标跟踪笔记一: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. ...

  2. Codeforces 981H:K Paths

    传送门 考虑枚举一条路径 \(u,v\),求出所有边经过它的答案 只需要求出 \(u\) 的子树内选出 \(k\) 个可以重复的点,使得它们到 \(u\) 的路径不相交 不难发现,就是从 \(u\) ...

  3. 多项式细节梳理&模板(多项式)

    基础 很久以前的多项式总结 现在的码风又变了... FFT和NTT的板子 typedef complex<double> C; const double PI=acos(-1); void ...

  4. 性能测试之-wrk(转)

    转载地址:http://zjumty.iteye.com/blog/2221040 测试先行是软件系统质量保证的有效手段. 在单元测试方面, 我们有非常成熟的 xUnit 方案. 在集成测试方面, 我 ...

  5. Max Flow

    Max Flow 题目描述 Farmer John has installed a new system of N−1 pipes to transport milk between the N st ...

  6. 使用wrk进行性能测试

    1 wrk介绍 wrk是一款现代化的HTTP性能测试工具,即使运行在单核CPU上也能产生显著的压力.它融合了一种多线程设计,并使用了一些可扩展事件通知机制,例如epoll and kqueue. 一个 ...

  7. USACO December 铂金Maxflow

    USACO 2015 December Contest, Platinum Problem 1. Max Flow Farmer John has installed a new system of ...

  8. wrk -- 小巧轻盈的 http 性能测试工具.

    标签: wrk http 性能 | 发表时间:2015-06-21 00:55 | 作者:zjumty 出处:http://www.iteye.com 测试先行是软件系统质量保证的有效手段. 在单元测 ...

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

随机推荐

  1. Delphi XE10百集视频教程计划

    1. 前言 本人现在的职业是Java程序员,一直想学习一个做桌面应用的编程语言,几年前无意中接触到Delphi,比VB功能强大,比C++语法更容易理解,加上Oracle的PL/SQL的底子,最终决定学 ...

  2. C/C++编译的程序内存组成:

    #include int main(){int a[1000000];//局部变量return 0;}编译运行后发现溢出错误.#include int a[1000000];//全局变量int mai ...

  3. Gartner首推机密计算:阿里云名列其中

    近日,全球信息技术研究机构Gartner发布了2019年云安全技术成熟度曲线报告(Gartner, Hype Cycle for Cloud Security, 2019, Jay Heiser, S ...

  4. Ionic 发送Http post PHP 获取不到数据

    1.app.js 配置请求设置 $httpProvider.defaults.headers.post={ 'Content-Type':'application/x-www-form-urlenco ...

  5. ubuntu触摸板失效问题

    很早便遇到这个问题,今天忍无可忍才度娘了一发.亲测有效! 用Ubuntu Tweak备份过桌面的配置,因此我尝试恢复桌面设置,果然奇迹发生了,触摸板立刻恢复了正常使用! 没有备份过的相信使用其中的重置 ...

  6. 深入浅出 Java Concurrency (3): 原子操作 part 2[转]

    在这一部分开始讨论数组原子操作和一些其他的原子操作. AtomicIntegerArray/AtomicLongArray/AtomicReferenceArray的API类似,选择有代表性的Atom ...

  7. 探索SpringBoot中的SpringMVC

    spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc.spring mvc 是只是spring 处理web层请求的一个模块 ...

  8. mysql 创建定时器

    mysql定时器是系统给提供了event,而oracle里面的定时器是系统给提供的job.废话少说,下面创建表: create table mytable ( id int auto_incremen ...

  9. 嘴巴题1 LA2531 足球联赛

    LA2531 足球联赛 题目: 有n只队伍打比赛,给出每只队目前获胜和失败的场数,再给出两两队伍接下来的比赛场次,问你哪些队伍可能的冠军 (题面摘自http://blog.csdn.net/s_h_r ...

  10. Python程序的执行过程

    1. Python是一门解释型语言? 我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在.如果是解释型语言, ...