a了,求时间复杂度
查看原帖
a了,求时间复杂度
690243
houluyu楼主2023/11/11 18:17

和题解思路一样的,不太理解时间复杂度

#include<bits/stdc++.h>
using namespace std;
const int N=30005;
int T;
int fa[N],size[N],d[N];
int fd(int x)
{
	if(x!=fa[x])
	{
		int rot=fd(fa[x]);
		d[x]=d[x]+d[fa[x]];
		fa[x]=rot;
	}
	return fa[x]; 
}
int main()
{
	scanf("%d",&T);
	for(int i=1;i<N;i++)fa[i]=i,size[i]=1,d[i]=0;
	while(T--)
	{
		char op[3];
		int x,y;
		scanf("%s%d%d",op,&x,&y);
		if(op[0]=='M')
		{
			int fx=fd(x),fy=fd(y);
			fa[fx]=fy;
			d[fx]=d[fx]+size[fy];
			size[fy]=size[fy]+size[fx];
		}
		else 
		{
			int fx=fd(x),fy=fd(y);
			if(fx!=fy)
			{
				printf("-1\n");
			}
			else 
			{
				if(x==y)printf("0\n");
				else printf("%d\n",(int)abs(d[x]-d[y])-1);
			}
		}
	}	
	return 0;
}
2023/11/11 18:17
加载中...