QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: nullptr_qwq

Posted at:

Last updated:

Back to Problem

New Editorial for Problem #6735

纯纯大模拟来的。

给树任意定根,考虑边是静态的所以会有若干个极大相同边颜色的连通块,不同的连通块是独立的。问题是一个点会在多个边同色连通块中,但是可以发现只有至多 $1$ 个满足 $u$ 不是这个连通块的根。

先考虑只有一个边同色的树怎么做。一个路径挂在 LCA 上分析,那么如果不是直链,那么 LCA 连的两条边中至少一个轻边,一个点到根只有 $O(\log n)$ 条轻边所以修改时再处理轻边就好了。维护 $f_u$($u$ 为重链链头)表示 $u$ 子树中以 $u$ 为顶端的直链,另一个端点最大的深度。考虑一个链上的问题,事实上就是一个点选一个颜色和它相同的轻儿子的 $f$ 继承上来或者选它自己,令这个决策是 $g_v$。每条重链看成一个独立的链的问题做是容易线段树的。

总之修改一个点时,重新做 $O(\log n)$ 个重链,修改 $O(\log n)$ 个点的 $f,g$ 即可,维护 $g$ 只需要关心轻儿子的颜色集合。

有多个连通块时,如果处理的连通块满足 $u$ 不是根就这么做,否则其实可以认为,连通块的根连出的都是轻边,但是对于根的 $g$ 对应的数据结构是全局维护的(不只是这个连通块内部)。等下面 $u$ 修改时会一并修改它的根的信息。

时间复杂度 $O(n\log n+q\log^2n)$。

Comments

No comments yet.