卧薪尝胆,厚积薄发。
Short But Scary
Date: Sat Mar 30 18:36:47 CST 2019 In Category: NoCategory

Description:

给一棵树,每次将 $u$ 到 $v$ 路径上所有边的存在情况进行反转。或者查询 $x$ 所在连通块的点数。
$1\leqslant n\leqslant 10^5$

Solution:

感觉可以用 $LCT$ 大力维护子树信息可做,不过题解给出了一个CDQ分治的做法。
每次在进入一个区间的时候标记所有在这个区间的 $u,v,x$ 为关键点,选一个关键点为根,如果子树 $k$ 里没有关键点的话就把 $k$ 的点数累加到父亲上并把 $k$ 删掉,如果 $k$ 的度数是二并且不是关键点,就把两边合并,然后对于每条边记录在翻转 $0/1$ 次之后两边是否连通,以及与 $x$ 或 $y$ 相连的点的个数,这样边的个数就是 $O(r-l+1)$ ,然后就可以递归进入子节点,在递归到叶子的时候统计答案,在退出区间的时候把这个区间的所有操作以树上差分的方式在树上打标记,然后退出进入下一个区间。

Code:


没有代码
Copyright © 2020 wjh15101051
ღゝ◡╹)ノ♡