「点分治」学习笔记

点分治能够快速处理树上路径问题。

在考虑路径问题时,可以利用分治的思想。选出一个根节点,先考虑所有经过根节点的路径。路径的起点和终点分别在根节点的两个子树上。解决之后,要解决的就是各个子树的路径问题了。我们再找出每个子树的根节点,然后一样递归处理即可。

问题在于应该选哪个节点作为子树的根节点。最优方法是选取树的重心。因为重心有一个性质,它的各个子树的大小都不超过总大小的一半。这样每一次都分为若干个不超过一半的子问题,就变成了分治算法。分治次数为$O( \log n)$

带权树上长度为K的路径是否存在(洛谷P3806)

点分治时记录每个根节点出发能达到的距离,开桶记录即可。

猜你喜欢

转载自www.cnblogs.com/qixingzhi/p/11118212.html
今日推荐