记录编号 413927 评测结果 AAAAAAAAAA
题目名称 [NOI 2002]银河英雄传说 最终得分 100
用户昵称 GravatarBaDBoY 是否通过 通过
代码语言 C++ 运行时间 0.634 s
提交时间 2017-06-12 21:39:21 内存使用 6.01 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
int n,m,x,y,fa[500001],fro[500001],beh[500001];char s[10];int abs(int u){	return u>0 ? u:-u;}int findd(int u){	if(fa[u]==u) return u;	int k=findd(fa[u]);fro[u]+=fro[fa[u]];	return fa[u]=k;}void add(int u,int v){	int kx=findd(u),ky=findd(v);	fa[kx]=ky;fro[kx]=beh[ky];beh[ky]+=beh[kx];}int main(){	freopen("galaxy.in","r",stdin);
  freopen("galaxy.out","w",stdout);scanf("%d",&m);	for(int i=1;i<=30000;i++) fa[i]=i,beh[i]=1;	while(m--)	{		scanf("%s%d%d",s,&x,&y);		if(s[0]=='M') add(x,y);		else if(findd(x)==findd(y)) printf("%d\n",abs(fro[x]-fro[y])-1);		else printf("-1\n");	}	return 0;}