树上分块。
第一种是随机撒点,在树上随机撒 $\frac{n}{S}$ 个点,关键点间期望距离不超过 $S$。优势很明显,当 $S$ 取根号的时候,可以处理出所有关键点间的信息,然后跳根号次就可以跳出一条路径。这个做题的方法很可洞见。
第二种是王室联邦式分块,方法是,在 dfs 过程中将子树大小能够划到一块的就划,设 $S$ 为阈值,则每块大小为 $[S, 3S]$,块个数 $\frac{n}{S}$ 左右。优势是每个点最近的为关键点的祖先的距离为 $O(S)$。这个做题的方法也是处理出关键点的信息,然后将询问拆成 $x \rightarrow a \rightarrow b \rightarrow y$,其中 $a$,$b$ 分别是 $x$,$y$ 的最近关键点祖先。
第三种是 top cluster,我显然不会。