CF939D Love Rescue
题意
给定两个长度为n的由小写字母组成的字符串
每次可以花费1的代价,指定两个字母,把其中一个全部变为另一个
求使两个字符串相同的最小花费
n <= 100000
因为谁变成谁没有关系反正相等就可以,所以如果两个字符在同一个并查集里,一定可以通过某些变换变到相等。那么从左到右枚举,如果两个字母不在同一个并查集里就加到一起,根据定义可知不会有更优方案
//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
char sr[1<<21],z[20];int C=-1,Z=0;
inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
void print(R int x){
if(C>1<<20)Ot();if(x<0)sr[++C]='-',x=-x;
while(z[++Z]=x%10+48,x/=10);
while(sr[++C]=z[Z],--Z);sr[++C]='\n';
}
const int N=1e5+5;
char s1[N],s2[N];int fa[N],ans[2][N],n,tot;
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d%s%s",&n,s1+1,s2+1);
fp(i,0,26)fa[i]=i;fp(i,1,n)s1[i]-='a',s2[i]-='a';
fp(i,1,n)if(find(s1[i])!=find(s2[i])){
++tot,ans[0][tot]=s1[i],ans[1][tot]=s2[i];
fa[find(s1[i])]=find(s2[i]);
}printf("%d\n",tot);
fp(i,1,tot)putchar(ans[0][i]+'a'),putchar(' '),putchar(ans[1][i]+'a'),putchar('\n');
return 0;
}
CF939D Love Rescue的更多相关文章
- CF939D Love Rescue 并查集
传送门 题意:给出两个由小写字母构成的长度相等的字符串$S$与$T$,给出变换$c1\,c2$表示将两个字符串中所有$c1$字符变为$c2$,求将$S$和$T$通过这种变换变为相等字符串的最少变换次数 ...
- CF954I Yet Another String Matching Problem(FFT+并查集)
给定两个字符串\(S,T\) 求\(S\)所有长度为\(|T|\)子串与\(T\)的距离 两个等长的串的距离定义为最少的,将某一个字符全部视作另外一个字符的次数. \(|T|<=|S|<= ...
- Nova Suspend/Rescue 操作详解 - 每天5分钟玩转 OpenStack(35)
本节我们讨论 Suspend/Resume 和 Rescue/Unrescue 这两组操作. Suspend/Resume 有时需要长时间暂停 instance,可以通过 Suspend 操作将 in ...
- HDU-4057 Rescue the Rabbit(AC自动机+DP)
Rescue the Rabbit Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- 使用Grub Rescue恢复Ubuntu引导
装了Ubuntu和Window双系统的电脑,通常会使用Ubuntu的Grub2进行引导. Grub2会在MBR写入引导记录,并将引导文件放在/boot/grub,破坏任意一项都会导致系统无法正常启动. ...
- sdut 2603:Rescue The Princess(第四届山东省省赛原题,计算几何,向量旋转 + 向量交点)
Rescue The Princess Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Several days ago, a b ...
- [转]linux援救模式:linux rescue使用详细图解
网上很多网友问怎么进rescue 模式,不知道怎么用rescue来挽救系统. 现在我来图解进入rescue (示例系统为RHEL 3) 1.用安装光盘或者硬盘安装的方式进入安装界面,在shell 中 ...
- 安装了ubuntu14.04+windows7双系统的笔记本启动后出现grub rescue>提示符
解决思想如下: 1.在grub rescue>提示符处输入ls 即可看到该命令列出了硬盘上的所有分区,找到安装了linux的分区,我的安装在(hd0,msdos8)下,所以我以(hd0,msd ...
- Win7启动修复(Ubuntu删除后进入grub rescue的情况)
起因:装了win7,然后在另一个分区里装了Ubuntu.后来格掉了Ubuntu所在的分区.系统启动后出现命令窗口:grub rescue:_ 正确的解决方式: 1.光驱插入win7安装盘或者用USB启 ...
随机推荐
- 【BZOJ2729】[HNOI2012]排队 组合数
[BZOJ2729][HNOI2012]排队 Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那 ...
- call by value reference name
按名调用 Algol 按值调用 Java https://docs.python.org/3.6/faq/programming.html#how-do-i-write-a-function-with ...
- win10安装VMware
首先下载VMware安装包: 双击安装: 点击:“uninstall”安装,这个过程需要一些时间 点击“Next” 选择典型或者自定义安装 这里我选择的是典型安装,点击“Next”: 选择是否检查更新 ...
- OpenMeetings安装
OpenMeetings是一个开源的视频会议软件. 它是基于OpenLaszlo’s的新流媒体格式和开源的Flash服务器---Red5! 采用了flash流媒体服务器Red5+OpenMeeting ...
- Codeforces Round #383 (Div. 2) D. Arpa's weak amphitheater and Mehrdad's valuable Hoses —— DP(01背包)
题目链接:http://codeforces.com/contest/742/problem/D D. Arpa's weak amphitheater and Mehrdad's valuable ...
- Codeforces Round #363 (Div. 2) C. Vacations —— DP
题目链接:http://codeforces.com/contest/699/problem/C 题解: 1.可知每天有三个状态:1.contest ,2.gym,3.rest. 2.所以设dp[i] ...
- C语言中的排序算法--冒泡排序,选择排序,希尔排序
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没 ...
- nginx ,node 配置项目
nginx ,node 配置项目 1.安装好node,npm 2.安装cnpm,-g是全局的 sudo npm install -g cnpm --registry=https://registry. ...
- 【错误信息】springMVC No mapping found for HTTP request with URI
出现这个问题的原因是在web.xml中配置错了:
- python sorted函数的小练习
前两天学习了一下socket编程,在向某大神请教问题时被嫌弃了,有一种还没学会走就想跑的感觉.大神说我现在的水平应该去做一些像是操作文件.序列号等的小练习来加深理解.下面是他给我出的小练习: 1.da ...