#include<bits/stdc++.h>
using namespace std;
const int maxn = 30030;
int t, fa[maxn], siz[maxn], dis[maxn];
inline void init(){
for(int i = 0; i <= maxn; i++){
fa[i] = i;
siz[i] = 1;
dis[i] = 0;
}
}
inline int find(int x){
if(fa[x] == x) return x;
int fx = find(fa[x]);
dis[x] += dis[fa[x]];//每次路径压缩相当于越过了dis[fa[x]]连队首,所以加上dis[fa[x]].
return fa[x] = fx;
}
inline void merge(int x, int y){
fa[x] = y;
dis[x] = siz[y];
siz[y] += siz[x];
siz[x] = 0;
}
int main(){
scanf("%d", &t);
init();
char op[3];
for(int i = 1, x, y; i <= t; i++){
scanf("%s%d%d", op, &x, &y);
if(op[0] == 'M'){
int fx = find(x), fy = find(y);
merge(fx, fy);
}
else if(op[0] == 'C'){
int fx = find(x), fy = find(y);
if(fx == fy){
//cout << dis[x] << endl;
//cout << dis[y] << endl;
printf("%d\n", abs(dis[x] - dis[y])-1);
}
else printf("-1\n");
}
}
return 0;
}
洛谷 1196 银河英雄传说
最新推荐文章于 2021-12-19 14:04:26 发布