目录

树上莫队

总结时用到的博客:

https://blog.csdn.net/qq_39759315/article/details/88553210

https://www.cnblogs.com/RabbitHu/p/MoDuiTutorial.html

分块方式

首先需要解决$bzoj1086$王室联邦,此题的解法即为分块的方法

下只简述过程,每块内的节点个数在$[B,3B]$之间,操作方式为维护一个栈,从根节点开始$dfs$,对于某一点$x$:

  1. 记录栈底的位置$flg$;
  2. 先访问所有子树,若访问完某棵子树后$top-flg\ge B$,则将$stack[flg+1]$至$stack[top]$中的点分为一块;
  3. 再将$x$压入栈。

最后栈中剩余的点加入最后一个块中

树上莫队的具体操作

在序列上操作

在树上操作

总结

总结一下树上的操作和序列的不同点

  1. 分块方式不同
  2. 无法直接类比普通莫队序列上的操作,需要通过一些辅助使树上操作变成欧拉序上的操作,或者直接在树上移动,移动是都是通过vis数组判断节点的值是否需要统计(添加或删除)