#include <bits/stdc++.h>
using namespace std;
int f[30010],m[30010],num[30010],n,x,y,a,b;
char z;
int find(int k)
{
if(f[k]==k) return k;
int xx=find(f[k]);
m[k]+=m[f[k]];
return f[k]=xx;
}
int main()
{
cin>>n;
for(int i=1;i<=30000;i++)
{
f[i]=i;
m[i]=0;
num[i]=1;
}
while(n--)
{
cin>>z>>x>>y;
a=find(x);
b=find(y);
if(z=='C')
{
if(a==b) cout<<abs(m[x]-m[y])-1<<endl;
else cout<<"-1"<<endl;
}
else
{
m[a]+=num[b];
f[a]=b;
num[b]+=num[a];
num[a]=0;
}
}
return 0;
}//AC代码
#include <bits/stdc++.h>
using namespace std;
int f[30010],m[30010],num[30010],n,x,y,a,b;
char z;
int find(int k)
{
if(f[k]==k) return k;
m[k]+=m[f[k]];
return f[k]=find(f[k]);
}
int main()
{
cin>>n;
for(int i=1;i<=30000;i++)
{
f[i]=i;
m[i]=0;
num[i]=1;
}
while(n--)
{
cin>>z>>x>>y;
a=find(x);
b=find(y);
if(z=='C')
{
if(a==b) cout<<abs(m[x]-m[y])-1<<endl;
else cout<<"-1"<<endl;
}
else
{
m[a]+=num[b];
f[a]=b;
num[b]+=num[a];
num[a]=0;
}
}
return 0;
}//11pts代码
只在find函数有所改动