RT,已经进行路径压缩了,但是输出的还是它的父亲
#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e6+10;
int num,ans;
int fa[100100];
int find(int x)
{
if(x==fa[x]) return x;
return fa[x]=find(fa[x]);
}
void join(int a,int b)
{
if(a<b) swap(a,b);
int fx=find(a);
int fy=find(b);
if(fx!=fy) fa[fx]=fy;
}
map<string,int> m1;
map<int,string> m2;
int main()
{
for (int i=1;i<=100100;i++)
{
fa[i]=i;
}
char c,cz;
string a,az;
int k=1;
while(1)
{
cin>>c;
if(c=='$')
{
return 0;
}
cin>>a;
if(c=='#')
{
m1[a]=k++;
m2[m1[a]]=a;
az=a;
}
if(c=='+')
{
m1[a]=k++;
m2[m1[a]]=a;
join(m1[a],m1[az]);
}
if(c=='?')
{
cout<<a<<" ";
cout<<m2[find(m1[a])]<<endl;
}
}
return 0;
}