Description
题目链接:Codeforces 939D
Tolya 和 Valya 各有一条 T 恤,上面分别有一个长度为 $n$,由小写字母组成的字符串 $S$ 和 $T$。你现在要通过变换 $(c_1,c_2)$ 使得这两个字符串变得一样。
具体来说,你每次可以选择一对小写字母 $(c_1,c_2)$ 并将两个字符串中的 $c_1$ 都变成 $c_2$。你需要求出使两个字符串变成一样的最少变换次数,并输出方案。
数据范围:$1\le n\le 10^5$
Solution
这道题的思路真的很妙啊!QAQ
我们用并查集来维护变换的过程,如果两个字符 $a,b$ 在同一个并查集内,那么意味着他们可以直接或间接变换成为相同字符。反之如果在不同并查集内,那么意味着不能变成相同字符。
接下来考虑字符串 $S$ 和 $T$ 的每一个对应位置,如果 $S_i$ 和 $T_i$ 不相同,那么他们一定要通过一系列变换变成相同的。此时有 $2$ 种情况:
- $S_i$ 和 $T_i$ 在同一个并查集内,那么他们一定在之前的变换中变成相同字符了,不需要增加变换。
- $S_i$ 和 $T_i$ 在不同的并查集内,这意味着他们还不是相同字符,需要将他们所在并查集的根节点变成相同的。
时间复杂度:$O(n\cdot\alpha(\vert S\vert))$(其中 $\vert S\vert$ 为字符集大小,本题中 $\vert S\vert=26$)
Code
1 |
|