【题解】[UOJ-207] 共价大爷游长沙
[UOJ-207] 共价大爷游长沙
给定一棵
个节点的树,和一个初始为空的点对的集合 ,有 次操作,需要支持 种操作:
- 断开一条边,再加入另一条边(保证仍然是树)。
- 在点对集合
中加入点对 。 - 在点对集合
中删除第 个加入的点对。 - 给定
,询问若把集合中的点对看做树上路径,集合中所有路径是不是都经过边 。
,任何时刻 。
考虑
关键在于判断关键路径是否都经过边
考虑如何来计算一个子树内,每条关键路径的端点个数。容易发现这个判断类似异或,只有关键路径中恰好一个端点在子树内才合法,
用
至于
时间复杂度
毛爷爷nb!
本题的关键点在于使用异或来解决子树内关键路径端点个数的问题,使用随机的权值是十分巧妙的方式,因为这可以使得冲突几乎不会发生,这需要对
因此,若出现需要快速判断集合是否相等,可以考虑随机分配权值之后维护异或和,但需要注意若集合中某元素出现个数为偶数,则方法失效(当然本题恰好运用了异或的这一性质,从而保证了子树内每条关键路径都只有一个端点)。
本题使用随机化,其方向在于降低冲突概率,思路值得借鉴。