代码如下:
#include <bits/stdc++.h>
using namespace std;
#define reg register
const int MAXN=3e4+10;
int t, n=MAXN;
int fa[MAXN], d[MAXN], siz[MAXN];
inline void init() {
for (reg int i=1; i<=n; ++i) {
fa[i]=i;
d[i]=0;
siz[i]=1;
}
}
inline int get(int x) {
if (fa[x]==x) return x;
int root=get(fa[x]);
d[x]+=d[fa[x]];
return fa[x]=root;
}
inline void merge(int x, int y) {
// x->y
x=get(x), y=get(y);
fa[x]=y, d[x]=siz[y];
siz[y]+=siz[x];
}
void solve() {
char opt; int x, y;
while (t--) {
opt=getchar();
while (opt!='M'&&opt!='C') opt=getchar();
scanf("%d%d",&x,&y);
if (opt=='M') {
if (get(x)==get(y)) continue;
merge(x,y);
}
else {
if (get(x)==get(y)) {
int res=max(abs(d[x]-d[y])-1,0);
printf("%d\n",res);
}
else puts("-1");
}
}
}
void input() {
scanf("%d",&t);
}
int main() {
input();
init();
solve();
return 0;
}