题目:
分析:既然出到了并查集这里,我想到的就是在模板上进行修改。
体会到了并查集模板代码的一个精华特点:我存放的值可以不是最终结果,也没必要是最终结果,我可以查就行啦。
代码:
#include<bits/stdc++.h>
using namespace std;
map<string,int> m;
string A[50005];
int cnt=1;
string ss;
string f(string s)
{
if(s==A[m[s]]) return s;
return f(A[m[s]]);
}
int main()
{
string s;
while(1)
{
cin>>s;
if(s[0]=='$') return 0;
if(s[0]=='#')
{
ss=s.substr(1,s.length()-1);
if(m[ss]!=0) continue;
m[ss]=cnt;
cnt++;
A[m[ss]]=ss;
continue;
}
if(s[0]=='+')
{
string s2=s.substr(1,s.length()-1);
if(m[s2]==0) { m[s2]=cnt;cnt++; }
A[m[s2]]=A[m[ss]];
continue;
}
string s2=s.substr(1,s.length()-1);
if(m[s2]==0) { m[s2]=cnt;cnt++; }
cout<<s2<<' '<<f(s2)<<endl;
}
}