分治 3

这一篇主要是讲:点分治,也是树分治的一个入门?

点分治

解决一类路径相关问题,考虑点分治
点分治,其实叫分类讨论差不多?
树是一棵无根树,先随便钦定一个根节点
首先我们把所有路径划分成两类:
1.经过当前根节点
统计经过该节点路径的合法条数
2.不经过当前根节点
不管,因为以后会管到的

向下递归,一直递归到叶子
这个时候显然每一条路径都被考虑到了,并且没有重复对吧
所以正确性是有保证的

但是复杂度和递归深度有关啊?
考虑优化这个东西

首先引入树的重心
树的重心,指这个点为根时,
它每个儿子的子树大小不超过总大小的一半
相关结论:
每棵树至多有两个重心,并且此时两个重心用边直接相连

每次递归选取树的重心为根
(反正是无根树,哪个点当根都是一样的)
然后递归下去,总的递归深度是\(log\)级别

所以点分治框架本身的时间复杂度是\(O(n\log n)\)
考虑到数据结构等等可能在框架的基础上再多一只\(\log\)
于是理论基础就讲完了

本来想写点分树的,时间有点紧,先不打了

posted @ 2022-10-11 21:27  2K22  阅读(35)  评论(0)    收藏  举报