题解:P4219 [BJOI2014] 大融合
显然可以 LCT,但还有更简单的方法。考虑离线,对于每条边 \(\langle x,y\rangle\),其中 \(x\) 是父亲,那么答案就是 \(y\) 不经过该边能到的点数乘以 \(x\) 不经过该边能到的点数,发现 \(x\) 不经过该边能到的点数不好维护,因此可以用并查集维护 \(x,y\) 所在连通块的大小,而 \(y\) 不经过该边能到的点数可以用树状数组维护。
考虑每次加边,只需使 \(x\) 到当前连通块的根这一条链加上 \(y\) 当前连通块的点数即可。链的修改只需在 \(x\) 加,在根的父亲处减 \(1\),最后查询子树和即可。时间复杂度 \(O((n+q)\log_2n)\)。

浙公网安备 33010602011771号