记录编号 |
271177 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOI 2002]银河英雄传说 |
最终得分 |
100 |
用户昵称 |
Tabing010102 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.640 s |
提交时间 |
2016-06-15 18:18:45 |
内存使用 |
0.64 MiB |
显示代码纯文本
#include<cstdio>
using namespace std;
int fa[30001],count[30001],before[30001],t;
inline int abs(int a){return a<0?-a:a;}
int find(int x){
if(fa[x]==x) return x;
else{
int fx=find(fa[x]);
before[x]+=before[fa[x]];
return fa[x]=fx;
}
}
void uunion(int x,int y){
int fx=find(x),fy=find(y);
fa[fx]=fy;
before[fx]=count[fy];
count[fy]+=count[fx];
}
int ask(int x,int y){
if(find(x)==find(y)) return abs(before[x]-before[y])-1;
else return -1;
}
int main(){
freopen("galaxy.in","r",stdin);
freopen("galaxy.out","w",stdout);
scanf("%d",&t);
for(int i=1;i<=30000;i++) fa[i]=i,before[i]=0,count[i]=1;
for(int i=1;i<=t;i++){
char buf[10]; scanf("%s",buf);
int l,r; scanf("%d%d",&l,&r);
if(buf[0]=='M') uunion(l,r);
else printf("%d\n",ask(l,r));
}
return 0;
}