确定一个根,发现直链(端点有祖先关系)几乎是互相可达的,如果是直径中点为根,就可以保证所有方向相同的直链都是等价的:提取出直径,如果存在一个点到直径边数 $\ge k$ 那么两个方向的直链就是等价的,否则两个方向的直链无法掉头完成互相转换。
然后考虑不是直链的弯链的等价类情况:贪心的过程发现是尽量往下为优:运动可以对一头拉的尽可能深,然后另一头拉的尽可能深,循环往复。如果构成了直链就是简单的,否则不能动(让端点变得更深)的时候,考虑和它等价的链一定形如 $a,b$ 满足 $h_a+dis(a,b)=h_b+dis(a,b)=k$,也就是所有这些链的交集。由于有向所以 $(a,b)\not\sim (b,a)$。
考虑对初始状态以及询问这 $q+1$ 个链进行代表元变换,也就是执行这个反复拉扯的过程直到无法让深度更优。如果可以更优,假设当前 $u$ 的高度为 $k$,那么走到 $v$ 为 $u$ 的祖先再接着往下变说明 $v$ 的高度 $>k+dep_u-dep_v$,将到最深叶子的链标出,由于总和 $\leq n$ 而长度严格递增,所以至多只会执行 $O(\sqrt n)$ 次。暴力执行该过程并长剖实现 $O(1)$ $k$ 级祖先即可。
时间复杂度 $O(n\log n+q\sqrt n)$。统计 $G$ 的连通块数量也可以根据这个代表元计数,启发式合并+哈希表统计即可。