洛谷:P2814 家谱(普及/提高-,并查集)

题目:

在这里插入图片描述

分析:既然出到了并查集这里,我想到的就是在模板上进行修改。

体会到了并查集模板代码的一个精华特点:我存放的值可以不是最终结果,也没必要是最终结果,我可以查就行啦。

代码:

#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;
 }
} 

猜你喜欢

转载自blog.csdn.net/weixin_42721412/article/details/108274559