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的主要内容,如果未能解决你的问题,请参考以下文章