记录编号 551061 评测结果 AAAAAAAAAA
题目名称 [NOI 2002]银河英雄传说 最终得分 100
用户昵称 Gravatar夜莺 是否通过 通过
代码语言 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;
}