树上二点路径异或和的 $O(n -\sqrt n)$ 做法!

· · 休闲·娱乐

故事是这样的,一道模拟赛题。

给定一棵树,q 次询问查询树上两点路径异或和。

这可真是太简单了!你很容易想到用复制树剖模板的方法来快速切掉这题。但模拟赛是断网的,你只能靠自己了。

你注意到有一个链的性质。考虑将链转化为序列,你很容易想到了将这个序列分为 O(\sqrt n) 块。这可真是太给力了!在 q\sqrt n 同阶的时候这个方法特别快!

但仅此部分分还不够,你要更多的分数!你将目光转向了树。有一种很简单的方法,就是暴力对所有的链都做一次莫队分化。然而这样子遇到菊花就炸了。所以你要一种新的方法!

你想到了一种简单的方法,将所有长超过 \sqrt n 的链单独维护,剩下的直接暴力增加。这可真是太妙了!

然而这样还是极慢。你考虑使用类似于链分治的方法。考虑抽出最长链,并判断剩下到它的距离!然而一直反复计算是复杂的。你注意到有些链可以直接丢掉,你发现直接维护儿子最长链是极其简单的!剩下的链判断长度即可。每条链单独维护前后缀!于是我们将复杂度做到了预处理 O(n),计算 \sqrt n!你感觉这真是太棒了!

然后由于 n 只有 10^5,你顺利通过了这道……

怎么是黄题?!