题目比较简单,一看就想到了并查集,之前做过的并查集都是数字类型的,这次换成了字符串类型,我们就直接使用map,想更快一点就用unordered_map,这样回更快。
代码虽然简单,但是还是有一点细节的~建议自己先实现一遍,下面是AC代码
#include<iostream>
#include <unordered_map>
#include <map>
using namespace std;
unordered_map<string,string> t;
string find_par(string str);
int main()
{
string str;
string temp;
while(cin>>str&&str[0]!='$')
{
if(str[0]=='#')
{
if(t[str.substr(1,str.size()-1)]=="" )
{
t[str.substr(1,str.size()-1)]=str.substr(1,str.size()-1);
}
temp=str;
}
else if(str[0]=='+')
{
t[str.substr(1,str.size()-1)]=temp.substr(1,temp.size()-1);
}
else //等于?
{
cout<<str.substr(1,str.size()-1)<<" "<<find_par(str.substr(1,str.size()-1))<<endl;
}
}
return 0;
}
string find_par(string str)
{
return str == t[str] ? str : find_par(t[str]);
}