【总结】点分治

点分治

点分治适合处理大规模的树上路径信息问题。

  • 求两点间距离为 k k k 的合法路径总和:使用扫描法 L L L R R R
  • 每次选择重心 p p p ,因为每一层的所有递归过程合计对每个节点处理 1 1 1 次,而点分治最多递归 l o g n logn logn 层,复杂度可以保证
  • 求重心必须完整地遍历一次整个子树,但是 d i s dis dis 数组是可以通过 v e c t o r vector vector 存下来的(不超过 n l o g n nlogn nlogn 个元素),也就是说子树的信息完全可以用数据结构存下来(只要不超过子树大小),甚至可以接到父节点上
  • 这就引出了点分树:将每次找到的重心与上一层的重心缔结父子关系,就可以方便地进行线段树合并等操作了

那么数据结构是干什么的呢?当然是计算 c a l c ( x ) calc(x) calc(x) 了。假设这个部分的时间复杂度是 O ( A ) O(A) O(A) ,总时间复杂度就是 O ( A n l o g n ) O(Anlogn) O(Anlogn)

这里可以把 c a l c calc calc 看成是一个静态的函数,所以可以一边递归一边计算。

点分治的含义是分治,也就是说分成若干个子问题,先将当前层的 c a l c calc calc 算出来,再分成若干个独立的子树分别求解。


__EOF__

本文作者仰望星空的蚂蚁
本文链接https://www.cnblogs.com/cqbzly/p/17530350.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   仰望星空的蚂蚁  阅读(9)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示