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. jquery旋转插件rotate参数说明

    具体可见:http://www.jianshu.com/p/b632a1ed6a57

  2. JZOJ5870 【NOIP2018模拟9.15】地图

    题目描述 Description

  3. conda、pip换源以及conda、pip命令比较

    conda换源: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda ...

  4. Ionic 生成icon图标

    1.直接切换到项目跟目录 运行以下命令 备注:运行第一次ionic rescoures 后自动生成文件夹rescoures ,让后帮你自己的icon.png 文件放进入就ok ,在次运行ionic r ...

  5. Django项目:CMDB(服务器硬件资产自动采集系统)--08--06CMDB测试Linux系统采集硬件数据的命令03

    https://www.virtualbox.org/wiki/Downloads https://mirrors.aliyun.com/centos/7/isos/x86_64/ http://ww ...

  6. 科普 | 编译 V8 源码

    2017-02-13 justjavac 象尘说 对于JavaScript程序员来说,可以瞧一瞧justjavac给大家写的科普类读物,V8引擎的分析,“也许你不懂C++”,但是你可以了解一下,总是好 ...

  7. PAT甲级——A1059 Prime Factors

    Given any positive integer N, you are supposed to find all of its prime factors, and write them in t ...

  8. Vue.之.回到顶部

    Vue.之.回到顶部 当页面出现上下滚动条时,页面右下角出现回到顶部功能. 在页面上添加如下DIV(写的CSS内部样式),这个DIV功能:出现滚动条往下滑动,就显示出来,反之隐藏.点击DIV快速回到顶 ...

  9. tensorflow 利用python generate_cifar10_tfrecords.py --data-dir=${PWD}/cifar-10-data报错

    报的错误如下:UnicodeDecodeError: 'ascii' codec can't decode byte 0x9e in position 0: ordinal not in range( ...

  10. 如何修改MyEclipse的SVN账户和密码

    如何修改MyEclipse的SVN账户和密码呢? 操作方法:删除C:\Users\Administrator\AppData\Roaming\Subversion\auth\svn.simple文件夹 ...