CF1797F Li Hua and Path
考虑这个恰好是很难做的,于是考虑容斥变成至少满足一个减去两个都满足。前面那个很好做,并且想明白了之后就明白带修怎么做了。问题是如何考虑两个都满足的情况。
考虑 kruskal 重构树。类比 P4899,我们建立以两点最大/最小值为边权的重构树,那么就对于边权转成 \(\forall e\in(x,y),x\leq e_w\leq y\)。即我们在以最小值建的重构树中找到 \(x\) 能跳到的最高点 \(p_x\),使 \(p_x\) 的子树内的所有点到 \(x\) 的路径都满足长度大于等于 \(x\)。那么我们考虑这些点只要在另一颗重构树能够跳到最高点 \(p_y\) 的子树内也包含 \(x\),那么点对 \((x,y)\) 就是一个合法点对。
思考如何维护。考虑在第二颗树上查询一个 \(x\),则它需要被它的所有合法祖先覆盖,那么我们不妨先将其挂到最高的祖先上,然后做搜索,将它们在第一颗树上对应的 dfn 序加 \(1\)。这样我们在查的时候查的就是对应的 \(y\) 在第一颗子树上能够做到的取值。求一个子树和即可。

浙公网安备 33010602011771号