记录编号 |
551061 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOI 2002]银河英雄传说 |
最终得分 |
100 |
用户昵称 |
夜莺 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.592 s |
提交时间 |
2020-04-06 12:48:49 |
内存使用 |
4.74 MiB |
显示代码纯文本
#include<cstdio>
using namespace std;
const int MAXN=30005;
int father[MAXN],num[MAXN],jl[MAXN];
int abs(int n){return n<0?-n:n;}
int find(int son){
if(son!=father[son]){
int t=find(father[son]);
jl[son]+=jl[father[son]];
father[son]=t;
}
return father[son];
}
inline void Union(int root1,int root2){
father[root2]=root1;
jl[root2]=num[root1];
num[root1]+=num[root2];
num[root2]=0;
}
inline void work(){
char check=getchar();
while(check!='M'&&check!='C')
check=getchar();
int x,y;
scanf("%d%d",&x,&y);
int fx=find(x);
int fy=find(y);
if(check=='M'){
Union(fy,fx);
}
else{
if(fx!=fy)puts("-1");
else printf("%d\n",abs(jl[x]-jl[y])-1);
}
}
int main(){
int T;
freopen("galaxy.in","r",stdin);
freopen("galaxy.out","w",stdout);
scanf("%d",&T);
for(int i=1;i<MAXN;i++){
father[i]=i;
num[i]=1;
}
while(T--)work();
return 0;
}