zoukankan      html  css  js  c++  java
  • 题解 CF939D 【Love Rescue】

    思路:并查集


    读入数据,题目中要求对字符串 A 中字母进行变换,使其与字符串 B 相同。

    首先我们可以知道,如果字母 a 可以转换成字母 b,字母 b 可以转换成字母 c ,那么字母 a 可以转换成字母 c 。

    啊,并查集find()的气息。

    那么我们只需要遍历一遍两个字符串,如果两个字符串当前位置的字符不在一个集合内,那么把它们合并到一个集合里,并且记录答案,最后输出记录了几次答案以及记录的答案就能过掉这个题了。

    Codeing Time

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<map>
    using namespace std;
    const int N=100005;
    int n,t;
    char ans[N][2],a[N],b[N];
    map<char,char> f;
    char find(char x) {
    	if(f[x]!=x) f[x]=find(f[x]);
    	return f[x];
    }
    bool merge(char x,char y) {
    	x=find(x);
    	y=find(y);
    	if(x!=y) f[x]=y;
    	else return 0;
    	return 1;
    }
    int main() {
    	cin>>n;
    	for(int i=1;i<=n;i++) cin>>a[i];
    	for(int i=1;i<=n;i++) cin>>b[i];
    	for(char i='a';i<='z';i++) f[i]=i;
    	for(int i=1;i<=n;i++) {
    		if(merge(a[i],b[i])) {
    			ans[++t][0]=b[i];
    			ans[t][1]=a[i];
    		}
    	}
    	cout<<t<<endl;
    	for(int i=1;i<=t;i++) cout<<ans[i][1]<<' '<<ans[i][0]<<endl;
    	return 0;
    }
    
    

    被黄学长拿来当考试题的题能不是好题吗

  • 相关阅读:
    Android入门:DDMS视图
    Android入门:EditText
    Hibernate入门:关联规则之多对一和一对多
    MyEclipse开发Rest服务入门
    Hibernate入门:使用C3P0连接池
    InfoQ:深入浅出REST
    二维码的编码与解码辅助类
    Android系统Resource之Drawable
    Android开发中的点滴
    粒子效果的简单实现
  • 原文地址:https://www.cnblogs.com/ahawzlc/p/12857287.html
Copyright © 2011-2022 走看看