UOJ#207. 共价大爷游长沙

UOJ#207. 共价大爷游长沙

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

支持如下操作:

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

\(\rm Sol:\)

草,太强了。

随机化nb!

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

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

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

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

posted @ 2020-09-11 19:31  Soulist  阅读(114)  评论(0编辑  收藏  举报