UOJ#207. 共价大爷游长沙

UOJ#207. 共价大爷游长沙

给定一棵树和一个集合 (S)(S) 内部为若干个点对 ((x,y)),定义一条边合法当且仅当对于所有 (x o y) 的路径,其被所有点经过。

支持如下操作:

  1. 删除一条边,然后插入一条边,保证仍是一棵树。
  2. (S) 中加入 ((x,y)) 点对。
  3. 删除点对 ((x,y))
  4. 查询 (x o y) 的边是否合法。

( m Sol:)

草,太强了。

随机化nb!

本质上只需要统计,(x o y) 的子树中,是否有所有的端点,且不存在一对点都在子树内。

然而由于删边和加边的操作会导致这个性质改变,所以我们考虑一个非常 nb 的东西,异或,他可以抵消。

所以对于每对点,我们附加一个随机的权值,然后统计子树异或和即可。

具体通过 LCT 维护,复杂度 (mathcal O(nlog n))

原文地址:https://www.cnblogs.com/Soulist/p/13653627.html