记录编号 586728 评测结果 AAAAAAAAAA
题目名称 [NOI 2002]银河英雄传说 最终得分 100
用户昵称 Gravatar小金 是否通过 通过
代码语言 C++ 运行时间 3.060 s
提交时间 2024-02-25 17:28:17 内存使用 9.80 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=30010;
int s[maxn],f[maxn],d[maxn],t;
int get(int x)
{
    if(x==f[x])
    {
        return x;
    }
    int r=get(f[x]);
    d[x]+=d[f[x]];
    return f[x]=r;
}
void merge(int x,int y)
{
    x=get(x);
    y=get(y);
    f[x]=y;
    d[x]=s[y];
    s[y]+=s[x];
}
int main()
{
    freopen("galaxy.in","r",stdin);
    freopen("galaxy.out","w",stdout);
    for(int i=1;i<=maxn;i++)
    {
        s[i]=1;
        f[i]=i;
    }
    cin>>t;
    //cout<<t<<endl;
    //cout<<t;
    while(t--)
    {
        char p;
        int a,b;
        cin>>p>>a>>b;
        if(p=='M')
        {
            merge(a,b);
        }
        else
        {
            if(get(a)!=get(b))
            {
                cout<<"-1"<<endl;
            }
            else
            {
                //cout<<d[a]<<' '<<d[b]<<endl;
                int ans=abs(d[a]-d[b])-1;
                cout<<ans<<endl;
            }
        }
    }
    return 0;
}