我直接不能李姐
查看原帖
我直接不能李姐
480934
xqqQwQ_楼主2021/10/7 19:38

带权并查集,11分

只有第一个点过了

#include<bits/stdc++.h>

using namespace std;

int fa[300001],val[300001];

int findn(int x)
{
    if(fa[x]==x) return x;
    else 
    {
        int tmp=findn(fa[x]);
        val[x]+=val[fa[x]];
        fa[x]=tmp;
        return tmp;
    }
}

void merge(int x,int y)
{
    fa[x]=y;
    val[x]=1;
    return;
}

int ys(int x)
{
    if(x==0) return 0;
    else if(x>0) return x-1;
    else return x*(-1)-1;
}

int main()
{
    for(int i=1;i<=30000;i++) 
    {
        fa[i]=i;
        val[i]=0;
    }
    int t;
    cin>>t;
    for(int i=1;i<=t;i++)
    {
        char op;
        int x,y;
        cin>>op>>x>>y;
        int fx=findn(x),fy=findn(y);
        if(op=='M')
        {
            merge(fx,fy);
        }
        else
        {
            if(fx!=fy) cout<<-1<<endl;
            else cout<<ys(val[x]-val[y])<<endl;
        }
    }
    return 0;
}
2021/10/7 19:38
加载中...