UOJ#207. 共价大爷游长沙
UOJ#207. 共价大爷游长沙
给定一棵树和一个集合 \(S\),\(S\) 内部为若干个点对 \((x,y)\),定义一条边合法当且仅当对于所有 \(x\to y\) 的路径,其被所有点经过。
支持如下操作:
- 删除一条边,然后插入一条边,保证仍是一棵树。
- 在 \(S\) 中加入 \((x,y)\) 点对。
- 删除点对 \((x,y)\)
- 查询 \(x\to y\) 的边是否合法。
\(\rm Sol:\)
草,太强了。
随机化nb!
本质上只需要统计,\(x\to y\) 的子树中,是否有所有的端点,且不存在一对点都在子树内。
然而由于删边和加边的操作会导致这个性质改变,所以我们考虑一个非常 nb 的东西,异或,他可以抵消。
所以对于每对点,我们附加一个随机的权值,然后统计子树异或和即可。
具体通过 LCT 维护,复杂度 \(\mathcal O(n\log n)\)