题意简述
给两棵树 $T_0, T_1$,每次删去 $T_0$ 的一条边后加入一条新边,要求加入后仍为树。求最少次数使得将 $T_0$ 修改为 $T_1$ 并构造方案。$n\le 500000$。
主要思路
可以强行用LCT做动态最小生成树无脑肝过去
显然改掉两棵树都有的边不优,猜测其他边均只需改变一次。
考虑对于 $T_0$ 中的一对父子关系 $f_0(v) = u$,若 $(u, v)$ 不在 $T_1$ 中出现应在断掉后如何连边。
一个简单的想法是直接连接 $(f_1(v), v)$,问题在于这条边可能已经在 $T_0$ 中连了。
想象一下由 $T_0, T_1$ 中都存在的边构成的子图,发现这其实是一堆连通块并且块内的结构在过程中是不变的。
设 $find(v)$ 为在上述子图中 $v$ 所在连通块内的在 $T_1$ 中最浅的祖先 $w$。根据上述子图的定义,$(f_1(w), w)$ 在 $T_0$ 中不存在且不在上述子图中的同一个连通块内,故删去 $(u, v)$ 后连接 $(f_1(w), w)$ 仍能保证其为一棵树。
求 $find(v)$ 可以并查集。复杂度 $O(n\alpha(n))$。
参考代码
1 |
|