题解 P2814 【家谱】

map版本映射并查集

注意其初始化其祖先字符串是其本身

#include<bits/stdc++.h>
using namespace std;
map<string,string> p;
char flag;
string s,tmp;
string find(string x){
	if (p[x]==x) return x;
	return p[x]=find(p[x]);
}
int main(){
	cin>>flag;
	while (flag!='$'){
		cin>>s;
		if (flag=='#') {
			if(p[s]=="") p[s]=s;//相当于一个并查集初始化的过程 
			tmp=s;	
		}
		if (flag=='+') p[s]=tmp;
		if (flag=='?') cout<<s<<" "<<p[find(s)]<<endl;
		cin>>flag; 
	}
	return 0;
} 
posted @ 2019-05-18 06:03  dinghao1262  阅读(151)  评论(0编辑  收藏  举报