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. 使用Java代码获取Java进程ID的方法

    需要jre/lib下的tools.jar包 public class Test { public static void main(String[] args) throws Exception {  ...

  2. Python学习day44-数据库(单表及多表查询)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  3. Python学习day42-数据库的基本操作(1)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  4. 0617Python-介绍、三种运行方式、变量、标识符和关键字、获取属性

    一.什么是自动化测试? 1.定义 自动:让机器自己动,就是自动 自动化:让机器按照人类的要求,把软件的所有功能遍历一遍 2.传统测试和自动化测试的区别 传统测试:繁琐.机械.门槛低.工资低 自动化测试 ...

  5. SQL ORM框架

    [LINQ]using (SqlConnection conn = new SqlConnection(conStr)) { string sql = $@"select * from vi ...

  6. [Hdu-6053] TrickGCD[容斥,前缀和]

    Online Judge:Hdu6053 Label:容斥,前缀和 题面: 题目描述 给你一个长度为\(N\)的序列A,现在让你构造一个长度同样为\(N\)的序列B,并满足如下条件,问有多少种方案数? ...

  7. Ionic 日期时间插件

    1.插件安装 日期插件 时间插件 备注: 具体 查看 https://github.com/rajeshwarpatlolla/ionic-datepicker    https://github.c ...

  8. idea短信验证

    idea短信验证(短信接口:阿里云:消息中间件:activeMQ) 主要分为两步:1.创建发消息  2.创建收消息 1.创建发消息 1.1 创建maven工程 1.2 pom.xml文件导入依赖 注意 ...

  9. leetcode 850. Rectangle Area II

    给定一些矩形2 求覆盖面积 矩形不超过200个 1 算法1 朴素思想 虽然朴素但是代码却有意思 利用容斥原理 复杂度高达 N*2^N class Solution: def intersect(rec ...

  10. 2019-5-21-asp-dotnet-core-图片在浏览器没访问可能原因

    title author date CreateTime categories asp dotnet core 图片在浏览器没访问可能原因 lindexi 2019-05-21 11:24:43 +0 ...