爆零 求助
查看原帖
爆零 求助
54372
A_Đark_Horcrux楼主2020/9/26 11:39

qaq

#include<cstdio>
#include<iostream>
using namespace std;
int t,a,b,p,q,i,f[30001],dis[30001],cnt[30001]; char c;
int abs(int cnt) {return cnt>0?cnt:-cnt;}
int find(int x)
{
    if(f[x]==x) return f[x];
    int awa=find(f[x]);
    dis[x]+=dis[f[x]];
    return f[x]=find(f[x]);
}
int main()
{
	scanf("%d",&t);
	for(i=1;i<=30001;i++) f[i]=i,cnt[i]=1;
    while(t--)
	{
		cin>>c>>a>>b; p=find(f[a]),q=find(f[b]);
        if(c=='M') dis[p]+=cnt[q],f[p]=q,cnt[q]+=cnt[p],cnt[p]=0;
        else if(c=='C') printf(p!=q?"-1\n":"%d\n",abs(dis[a]-dis[b]));
    }
    return 0;
}
2020/9/26 11:39
加载中...