F - Colored Ball

· · 题解

F - Colored Ball

Description

n 个集合 S_1, S_2, \dots, S_n,最开始第 i 个集合内有且仅有一个元素 c_i。接下来需要进行 q 次操作,第 i 次操作如下:

每次操作后,你需要求出集合 S_{b_i} 中的元素种类数量。

## Solution 合并集合,自然的想到启发式合并。 但这并不是简单的合并集合,而是将某个集合中的所有元素全部搬到另一个集合中,再把这个集合清空。 可以这样实现这件事情:仍然按照启发式合并的思路,将总数较少的集合搬到总数较多的集合中(注意这里没有区分 $a_i, b_i$),再把另一个集合清空。然后看一下,如果刚才是把集合 $b_i$ 中的元素搬到了集合 $a_i$ 里,那么就代表我们移错了。解决措施直接又快捷:将两个集合交换即可。因为交换 STL 容器是 $\Theta (1)$ 的。 总时间复杂度 $\Theta (n \log n)$,这也是启发式合并的复杂度。 ## Code <https://atcoder.jp/contests/abc329/submissions/47731747> at_abc329_f