48分,大佬求助
查看原帖
48分,大佬求助
302189
dbodb楼主2020/8/4 15:39
#include<bits/stdc++.h>
#pragma GCC timilize(3)
using namespace std;
int fa[40005];
int d[40005];
int size[40005];
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')
            f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return x*f;
}
int get(int x)
{
if(x==fa[x])
return x;
int root=get(fa[x]);
d[x]+=d[fa[x]];
return fa[x]=root;
}
void merge(int x,int y)
{
x=get(x);
y=get(y);
fa[x]=y;
d[x]=size[y];
size[y]+=size[x];	
}
int main()
{int t;
	cin>>t;
	for(int i=1;i<=t;i++)
	size[i]=1,fa[i]=i;
    for(int i=1;i<=t;i++)
	{
	char ch;
	int q,w;
     cin>>ch;
	if(ch=='M')
	{
	q=read();
    w=read();
	merge(q,w);
	}
	if(ch=='C')
	{
	q=read();
	w=read();
	if(get(q)==get(w))
	cout<<abs(d[q]-d[w])-1<<endl;
	else cout<<-1<<endl;
	}
  }
}
2020/8/4 15:39
加载中...