CF939D Love Rescue

Posted larry-zero

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF939D Love Rescue相关的知识,希望对你有一定的参考价值。

题目描述

给定两个长度为n的由小写字母组成的字符串
每次可以花费1的代价,指定两个字母,把其中一个全部变为另一个
求使两个字符串相同的最小花费
n <= 100000

输入输出样例

输入 #1
3
abb
dad

输出 #1

2
a d
b a

输入 #2

8
drpepper
cocacola

输出 #2

7
l e
e d
d c
c p
p o
o r
r a

解题思路

一开始自己没看懂题目,以为是对当前状态进行对应的修改,后来发现其实就是个并查集是捆绑修改的

AC Code

#include<bits/stdc++.h>
using namespace std;
int fa[30];
int find(int x) {
    if(fa[x]==x)return x;
    return fa[x]=find(fa[x]);
}
int sum;
char ans1[200],ans2[200];
char s1[100001],s2[100001];
int main() {
    int n;
    cin>>n;
    for(int i=0; i<=26; i++)fa[i]=i;
    for(int i=1; i<=n; i++) {
        cin>>s1[i];
    }
    for(int j=1; j<=n; j++) {
        cin>>s2[j];
    }
    for(int i=1; i<=n; i++) {
        int xx=find(s1[i]-a);
        int yy=find(s2[i]-a);
        if(xx!=yy) {
            sum++;
            ans1[sum]=s1[i];
            ans2[sum]=s2[i];
            fa[xx]=yy;
        }
    }
    cout<<sum<<endl;
    for(int i=1; i<=sum; i++) {
        printf("%c %c
",ans1[i],ans2[i]);
    }
    return 0;
}

 

以上是关于CF939D Love Rescue的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 939 D Love Rescue

cf1562E. Rescue Niwen!

CF553C Love Triangles(带权并查集)

HDU4057 Rescue the Rabbit(AC自动机+状压DP)

CF #727(div2)B. Love Song,前缀和

CF553C Love Triangles(二分图)