记录编号 533965 评测结果 AAAAAAAAAA
题目名称 [NOI 2002]银河英雄传说 最终得分 100
用户昵称 Gravatarleon 是否通过 通过
代码语言 C++ 运行时间 0.666 s
提交时间 2019-07-02 10:52:27 内存使用 8.49 MiB
显示代码纯文本
    #include<iostream>
    #include<iomanip>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int fa[30001],n,before[30001],s[30001];
    char b;
	int aa,bb;
int find(int x)
{
	int fx;
	if(fa[x]==x) return x;
	fx=find(fa[x]);
	before[x]+=before[fa[x]];
	fa[x]=fx;
	return fa[x];
}
void bing(int x,int y)
{
	int fx,fy;
	fx=find(x);
	fy=find(y);
	fa[fx]=fy;
	before[fx]=s[fy];
	s[fy]+=s[fx];
}
void check(int x,int y){
	if(find(x)!=find(y)) printf("-1\n");
	else 
	{		int m;
		if(before[x]>before[y]){
		m=before[x]-before[y]-1;
				}
				else{
				m=before[y]-before[x]-1;
				}
		printf("%d\n",m);
	}
}
    int main(){
    	ios::sync_with_stdio(false);
    	freopen("galaxy.in", "r", stdin);
    	freopen("galaxy.out", "w", stdout);
    	for(int i=1;i<=30001;i++){
    		fa[i]=i;
    		s[i]=1;
    	}    
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>b>>aa>>bb;
			if(b=='M'){
				bing(aa,bb);
			}
			else{
				check(aa,bb);
			}
		}
    	return 0;
    }