20240806:点分治,虚树选做
P4178 Tree#
题意:给定一棵树,求多少无序对
对于树上的路径进行分类:经过根;不经过根。
第二类路径点可以通过递归子树求出。
对于经过根的路径,可以一遍 dfs 求出每个点到根的距离
问题转化为求
如果没有后面子树的限制,可以简单的排序 + 双指针求出,那么只要把每棵子树多算的减掉即可。
单次复杂度
考虑
因此每次都选重心,树的大小至少减少一半,最多递归
时间复杂度
P9058 [Ynoi2004] rpmtdq#
题意:对于一棵树有
总共
如果
那么对于任何询问,选
点分治处理路径问题,只统计经过
设当前在处理点
定义
现在证明为什么
对于
显然
定义
总结:任意点
但是
点
将询问离线,转化为二维数点,时间复杂度
点对
我们总能递归到
还有一个问题是如何求前驱后继,对于 P9678 来说,用 set 维护足矣,但本题还需进一步卡常。
令
P4292 [WC2010] 重建计划#
题意:给定一棵树,求长度属于
对于一条路径,如果
不难想到二分答案,把每条边都减去 mid 后检查长度属于
还是通过经过哪个重心来划分路径,设当前重心为
设
显然用
前面一项很容易用数据结构维护,但是加上点分治和二分复杂度有三个 log,无法通过。
发现
这样复杂度还是可能退化到
如果直接点分治的同时去排序,仍然是三个 log 的。但是点分树的形态始终不变,我们可以在二分之前对于每个重心先排好序。
这样整体就是双 log 复杂度。submission
CF150E Freezing with Style#
题意:给定一颗带边权的树,求一条边数在
对于序列
和上题做法一致,二分答案,如果存在路径满足
设
CF1260F Colored Tree#
题意:
给定一棵树,每个节点有一个颜色
对于全部
不妨只考虑交集中的某一点
线段树维护交集贡献,时间复杂度
懒标记线段树爆了,考虑树状数组维护区间加区间和。
维护差分数组
后面一个和式也用树状数组维护即可。submission
[HZOI 2015] 树黑白#
题意:给定一棵树,一开始都是白色,支持两种操作:
- 将
反色。 - 查询
到所有黑色节点的距离和。
把
因此不管修改还是查询都只要在点分树上暴力跳
设
设
从
那么
P2056 [ZJOI2007] 捉迷藏#
题意:给定一棵树,初始全黑。支持单点改色,询问最远两个黑点距离。
类似直径求法,每个分治重心维护子树内黑点到
mutiset 常数过大了,手写一个懒删除堆。submission
P3345 [ZJOI2015] 幻想乡战略游戏#
题意:给定一棵树,保证每个点度数不超过
考虑暴力做法:
设当前在点
与之直接相连的儿子
也就是
:
设
由于
因此
-
:设
为最优决策点。显然
在 的子树内,现在证明不管从 子树的哪个点 出发(将 和 的儿子比较)都能到达 。砍掉多余部分,只留
的子树。强制使
为根,由于 ,一定有 ,因此存在一条 到 的决策路径。
修改和单点查
一个想法是枚举
时间复杂度
加强版少去了度数限制,做法是链剖 + 线段树,待补。
P2495 [SDOI2011] 消耗战#
题意:给定一棵树,
设关键点集为
显然有
仅保留关键点之间的祖先后代关系(保留根节点,和关键点两两之间的 lca)不会改变最后的 dp 值。
定义虚树为包含关键点和所有 lca 的最小树。
以下构造方式能说明虚树规模只有
二次排序 + LCA 连边:
- 将关键点按 DFS 序排序;
- 遍历一遍,任意两个相邻的关键点求一下 LCA,并且判重;
- 然后根据原树中的祖先后代关系建树。
具体实现上,在关键点序列上枚举相邻的两个数,两两求得 LCA 并且加入序列
此时
假设
按照 dfs 序依次递增,则 由于
和 都是 的祖先,因此其中一个一定是另一个的祖先。 假设按照时间戳排序得到
。 那么任意的两个节点的 lca 可以写做
任意两个关键点的 lca 都包含在我们新增的相邻 lca 里。
同时证明了虚树规模是
的。
把
为什么这样连边不重不漏?
如果
是 的祖先。 由于
在 中相邻,因此 到 的链上不存在任何其他节点,直接 连向 即可。 如果
不是 的祖先。
的 dfs 序一定小于 ,因此 与 在之前已经直接或间接相连了。 又由于
相邻, 到 之间不存在其他点, 连向 是不重不漏的。
P3320 [SDOI2015] 寻宝游戏#
题意:每次新增或减少一个关键点,并询问包含所有关键点的生成子树的边权和
这颗生成子树的根一定是所有关键点的最近公共祖先,因为任意两点要求联通。
发现这与我们构建虚树的形式很像,可以单次
但是本题并不保证
Gym - 104128E#
题意:给定一颗树,初始全白,问全部染黑的最小代价。把
对于每个深度建出虚树,时间复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!