哪位可以看一下,为什么会爆0啊
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
const int maxn = 3e4 + 5;
int T;
struct ufs
{
int f[maxn], dis[maxn], size[maxn];
//dis存节点x到父节点f[x]之间的边权
//size是集合的大小
ufs()
{
for(int i = 0;i <= maxn; ++i)
{
f[i] = i;
dis[i] = 1;
size[i] = 0;
}
}
int get(int x)//按秩合并
{
if(f[x] == x)
return x;
int fa = f[x];
f[x] = get(f[x]);
dis[x] += dis[fa];
size[x] = size[f[x]];
return f[x] ;
}
void uni(int x, int y)
{
x = get(x); y = get(y);
if(x == y)
return;
f[x] = y;
dis[x] = size[y];
size[y] += size[x];
size[x] = size[y];
}
bool ask(int x, int y)
{
return get(x) == get(y);
}
};
ufs bin;
int main()
{
cin >> T;
char fl;
int p, q;
while(T--)
{
cin >> fl >> p >> q;
if(fl == 'M')//连接
bin.uni(p, q);
else
{
if(!bin.ask(p, q))
puts("-1");
else
cout << abs(bin.dis[p] - bin.dis[q]) - 1<< endl;
}
}
return 0;
}