作者:
fangy
,
2023-03-16 18:13:53
,
所有人可见
,
阅读 2
#include <iostream>
using namespace std;
const int N = 300010;
int n, m;
int p[N], d[N], sz[N];
int find(int x)
{
if (p[x] != x)
{
int t = find(p[x]);
d[x] += d[p[x]];
p[x] = t;
}
return p[x];
}
int main()
{
cin >> m;
for (int i = 1; i <= N; ++i) p[i] = i, sz[i] = 1;
while (m--)
{
char op[2];
int x, y;
scanf("%s%d%d", op, &x, &y);
int px = find(x), py = find(y);
if (op[0] == 'M')
{
if (px != py) p[px] = py, d[px] = sz[py], sz[py] += sz[px];
}
else
{
int distance = -1;
if (px == py) distance = max(0, abs(d[x] - d[y]) - 1);
printf("%d\n", distance);
}
}
return 0;
}