标签: 动态点分治


其实也没有做很多道题,但是还是总结一波吧.......

要知道动态点分治,首先得知道点分治.

点分治就是对于一个联通块,求出这个联通块的重心,然后把这个联通块分为很多个联通块,这些联通块都为这个重心的子树,那么求出这些子树对于重心的贡献,然后递归地做下去,由于重心的每一棵子树大小都小于联通块的一半,那么可以达到快速求解的目的.

动态点分治,在点分治的基础上,利用分治的过程重新构建一颗点分树,那么每一次修改都只会影响到点分树上的父亲节点,重新计算对于这些节点的贡献即可,由于点分树的高度是严格log的,那么每一次修改都只需要修改log个节点的贡献.

在修改的过程中,动态点分治可以十分灵活,不过不可避免的要写个求LCA,个人的习惯是写树链剖分,因为复杂度不是满的.对于维护,可以有很多种维护方式,通常都需要维护联通块到自己这个重心,和父亲重心的贡献,至于用什么来维护,根据题目而定,像线段树(动态开点),堆,数组等都是可以的.

相关文章:

  • 2021-11-12
  • 2021-07-16
  • 2021-05-21
  • 2021-05-26
  • 2021-10-30
猜你喜欢
  • 2021-07-12
  • 2021-05-15
  • 2022-12-23
  • 2019-02-23
  • 2021-06-14
  • 2021-11-21
相关资源
相似解决方案