例题 poj1741 tree
Description
给定一棵
n
个顶点的树,边带正权,问你距离不超过
n≤105
Solution
这道题就当做点分治讲解吧。
- 树的重心:如果删除树上一个点
u
后每颗子树的大小都不超过
n2 ,那么称 u 为这棵树的重心。
假设我们按重心把树分成了若干子树,那么所要求得顶点对必居下面三者其一。
1 属于同一子树的顶点对 (v,w) :
递归下去。-
2
属于不同子树的顶点对
(v,w) :
直接对所有点按照距离重心距离排序,然后枚举所有点,二分即可,减去情况 1 中的点对。 3 重心s和其他顶点v组成的顶点对 (s,v) :
额外添加一个距离 s 为零的结点,转化为情况2 。
然后就没什么好说的,看代码吧。
题解。
例题 bzoj2599 [IOI2011]Race
题解。
例题 bzoj2152 聪聪可可
题解。
例题 hdu4812 D Tree
Description
给定一棵
n
个点的树,每个点有权值
问是否存在一条路径使得路径上所有点的权值乘积
mod(106+3)
为
K
输出路径的首尾标号,若有多解,输出字典序最小的解
Solution
可以预处理乘法逆元。
记录一个
到某个点
U
的时候,如果
例题 cdoj1562 Amaz1ng Prime
Description
给定一棵树,边带权(
0
或者
Solution
tong[i]
表示树上权值和为
i
的路径数量。
tong[i]=f[0]∗f[x]+f[1]∗f[x−1]+...+f[x]∗f[0]
例题 bzoj3697 采药人的路径
题解。
点分治总结
对于一般的点分治问题,解决了跨越重心的统计就好了。复杂度是
O(log2n∗跨越重心统计复杂度)
。附上学长博客。
通过几道点分治例题,已经可以运用简单点分治解决问题。