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+5;
int n,k;
int jie[N],inv[N];
int A(int n,int m){if(n<0||m<0||n<m) return 0;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(1);g[0]=val[l];f.resize(2);f[0]=1;f[1]=si[l];return;}Poly lf,lg,rf,rg;int mid=(l+r)>>1;divi(l,mid,lf,lg);divi(mid+1,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[2*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]=1;int pre=0;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=0;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(1,ct,F,G);Poly T;T.resize(2);T[0]=1;T[1]=n-sz[x];G=G*T;for(reg i=0;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]=1;sum[x]=1;}// cout<<" return "<<x<<" f "<<f[x]<<endl;
}
int main(){rd(n);rd(k);if(k==1){ans=(ll)n*(n-1)/2%mod;ot(ans);return 0;}jie[0]=1;for(reg i=1;i<=k;++i) jie[i]=mul(jie[i-1],i);inv[k]=qm(jie[k],mod-2);for(reg i=k-1;i>=0;--i) inv[i]=mul(inv[i+1],i+1);int x,y;for(reg i=1;i<n;++i){rd(x);rd(y);add(x,y);add(y,x);}dfs(1,0);ot(ans);return 0;
}}
signed main(){Miracle::main();return 0;
}/*Author: *Miracle*Date: 2019/4/8 18:57:00
*/

转载于:https://www.cnblogs.com/Miracevin/p/10988527.html

CF981H K Paths相关推荐

  1. 使用wrk进行性能测试

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

  2. 也谈贝叶斯分类(C#)版本

    代码下载 最近在做一个大作业.搭建一个信息检索平台.用到了贝叶斯分类参考了洞庭散人大哥的技术博客 http://www.cnblogs.com/phinecos/archive/2008/10/21/ ...

  3. Decision Transformer环境安装

    Official codebase for Decision Transformer: Reinforcement Learning via Sequence Modeling 参考了min-deci ...

  4. 【PAT数据结构与算法题目集】 旅游规划(单源最短路径,长度+路径查找)

    [PAT数据结构与算法题目集] 旅游规划(单源最短路径,长度+路径查找) 题目 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客 ...

  5. cesium实现车辆转运模拟

    一.使用cesium示例里面的模型 模型为glb格式 二.封装转运模拟工具类 /**** 转运模拟* date:2022-06-21* author:zdh* @type {TransferSimUt ...

  6. 【编译原理】【实验】利用子集法构造DFA

    利用子集法构造DFA 一.实验目的 二.实验要求.内容 三.实验设备 四.实验原理(或程序框图)及步骤 五.程序源代码 六.实验数据.结果分析 七.存在的问题与体会 附录 一.实验目的 掌握将非确定有 ...

  7. java迪杰斯特拉算法实例,Java 图的最短路径dijstra(迪杰斯特拉)算法和拓扑排序

    一.图的最短路径从某顶点出发,沿图的边到达另一顶点所经过的路径中,各边上权值之和最小的一条路径叫做最短路径 图的最短路径有许多重要的应用. 例如:上图中v0-v8有9个点,可以看做不同的地点,现在要规 ...

  8. 一起来学k8s 40. kubernetes api操作

    kubernetes api操作 kubectl 通过访问 Kubernetes API 来执行命令.我们也可以通过对应的TLS key和token, 使用curl 或是 golang client做 ...

  9. 数据结构(java版)

    一.绪论 1.数据结构概论 数据结构研究计算机的操作对象以及他们之间的关系和操作. 2.算法的定义.特征以及要求 算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转化为输出的计算 ...

最新文章

  1. DAY10-万物皆对象-2018-2-2
  2. 【转】数据库的乐观锁和悲观锁
  3. Hadoop Hive概念学习系列之hive里的HiveQL——查询语言(十五)
  4. shell脚本如何实现goto_linux通过shell脚本实现对apache服务的监控
  5. FortiGate 的相关知识
  6. 隐藏网页文件的后缀(IIS测试通过)!
  7. python两列数据相关性_使用.corr获取两列之间的相关性
  8. 接口与事件之图形界面的认证登录
  9. MySql存储过程的操作
  10. PowerDesign逆向生成数据表结构PDM文件
  11. matlab解二元二次方程组
  12. 计算机粘贴功能不能用了,电脑不能粘贴怎么回事_电脑不能粘贴了怎么解决
  13. android7.0root工具,KingRoot全球实现Android 7.0一键 Root
  14. Deepin双系统找不到Windows启动项
  15. AD软件画电路图笔记
  16. IOS 如何通过浏览器打开App
  17. 电脑蓝屏原因与手把手处理指南(关于0x00000124分析)
  18. android磁盘分区,Android SD卡做磁盘分区图文教程
  19. 汉寿计算机职业中专,汉寿县职业中等专业学校2021年招生简章
  20. 李秘书讲写作:这节课的标题起什么好?

热门文章

  1. 前端面试-综合问题版
  2. 论面向组合子程序设计方法 之 重构
  3. Log4j的isdebugEnabled的作用
  4. java字符串格式化:String.format()方法的使用
  5. OpenCV学习笔记(五十六)——InputArray和OutputArray的那些事core OpenCV学习笔记(五十七)——在同一窗口显示多幅图片 OpenCV学习笔记(五十八)——读《Mast
  6. 计算机视觉方面2016年重要会议deadline
  7. python常用异常处理
  8. Git 分支 - 变基
  9. POI Excel表格合并,边框设置
  10. android端 socket长连接 架构