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