全部TLE求助
  • 板块P1536 村村通
  • 楼主zhibuba
  • 当前回复18
  • 已保存回复18
  • 发布时间2020/5/26 17:57
  • 上次更新2023/11/7 01:41:26
查看原帖
全部TLE求助
319478
zhibuba楼主2020/5/26 17:57
#include <stdio.h>

int set[1001];

int SetFind(int x)
{
	if (set[x] < 0)
		return x;
	else
		return set[x] =  SetFind(set[x]);
}

void SetUnion(int a, int b)
{
	int A = SetFind(a), B = SetFind(b);
	if (A == B)
		return ;
	if (set[A] < set[B])
	{
		set[A] += set[B], set[B] = A;
	}
	else
	{
		set[B] += set[A], set[A] = B;
	}
	return ;
}

int main(void)
{
	while (1)
	{
		int n, m;
		if (scanf("%d%d", &n, &m) == EOF)
			break;
		if (m == 0)
			{
				scanf("%*d");
				printf("%d\n", n - 1);
			}
		else
			{
				for (int i = 1; i <= n; i++)
					set[i] = -1;
				int a, b;
				while (m--)
				{
					scanf("%d%d", &a, &b);
					SetUnion(a, b);
				}
				int ans = -1;
				for (int i = 1; i <= n; i++)
					if (set[i] < 0)
						ans++;
				printf("%d\n", ans);
			}
	}
	return 0;	
}
2020/5/26 17:57
加载中...