题解:P9067 [Ynoi Easy Round 2022] 虚空处刑 TEST_105
题意
给定一颗
定义结点
共有
- 将结点
x 的点权修改为y 。 - 查询结点
x 所在的「同权连通分量」的大小。
记
解法
「同权连通分量」显然不好直接维护,考虑 dsu on tree。
注意到集合大小不减,那么可以直接合并集合。那么就可以用并查集维护每个连通分量的根结点,那么更新信息只需要处理一个点。
定点
同时维护一下每个连通分量的大小,这样子对于查询操作可以
然后对于修改操作,具体如下:
- 先找到对应连通分量根结点;
- 再在
S 中启发式合并颜色相同的结点; - 若当前连通分量根结点的父亲颜色相同,那么也同时合并。
时间复杂度
可以发现时间复杂度的瓶颈就是合并每个集合,如果使用线性数据结构维护集合,那么单个元素的操作次数是
将所有合并的情况建成一颗树,那么一个结点需要合并到另外一个集合中当且仅当经过了一条轻边。而经过轻边后集合大小至少会翻倍(重儿子大小大于轻儿子),所以至多会经过
故时间复杂度