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