调了一下午了,错哪里类,求调
#include <iostream>
#include <algorithm>
using namespace std;
int t;
struct uf_set
{
int fa[100005];
int sum[100005];
int dis[100005];
void init()
{
for(int i=1;i<=30000;i++) fa[i] = i,sum[i]=1,dis[i]=0;
}
int find(int x)
{
if(fa[x]==x) return x;
dis[x]+=dis[fa[x]];
return fa[x] = find(fa[x]);
}
void merge(int x,int y)
{
int fx = find(x);
int fy = find(y);
fa[fx] = fy;
dis[fx] += sum[fy];
sum[fy]+=sum[fx];
sum[fx] = 0;
return;
}
bool pd(int x,int y)
{
if(find(x)==find(y)) return true;
else return false;
}
int query(int x,int y)
{
return abs(dis[x]-dis[y])-1;
}
}uf;
int main()
{
cin>>t;
uf.init();
while(t--)
{
char opt;
int x,y;
cin>>opt>>x>>y;
if(opt=='M')
{
uf.merge(x,y);
}
else {
if(uf.pd(x,y))
{
int c1 = uf.query(x,y);
cout<<c1<<endl;
}
else
{
cout<<-1<<endl;
}
}
}
return 0;
}