关于并查集TLE是因为数据量过大怎么改
查看原帖
关于并查集TLE是因为数据量过大怎么改
551088
FincheuwYggdrasil楼主2022/7/27 14:13

原题

#7,#8,TLE

#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e6+5;
int f[MAXN],m,n,x,y,many[MAXN];

void innit()
{
	for(int i = 1;i < MAXN;i++)
	{
		f[i] = i;
		many[i] = 1;
	}	
}

int find_f(int x)
{
	if(x != f[x])
		return f[x] = find_f(f[x]);
	return f[x];
}

void join(int x,int y)
{
	int fx = find_f(x),fy = find_f(y);
	if(fx != fy)
	{
		f[fy] = fx;
		many[fx] += many[fy];
	}
		
}

int main()
{
	innit();
	scanf("%d%d",&n,&m);
	for(int i = 0;i < m;i++)
	{
		char k;
		cin >> k;
		if(k == 'M')
		{
			scanf("%d%d",&x,&y);
			join(x,y);
		}
		if(k == 'Q')
		{
			scanf("%d",&x);
			cout << many[find_f(x)] << endl;
		}	
	}
 	return 0;
}
2022/7/27 14:13
加载中...