蒟蒻求助
查看原帖
蒟蒻求助
781352
Sexy_Foxy楼主2023/1/11 19:24

WA的代码:

#include<cstdio>
#include<set>
#include<algorithm>
using namespace std;
const int MAX=5e4+10;
int fa[MAX],dep[MAX];
int n,m;
void init()
{
	for(int i=1;i<=n;i++)
	{
		fa[i]=i,dep[i]=1;
	}
}
int find(int x)
{
	if(x==fa[x])
	{
		return x;
	}
	else
	{
		fa[x]=find(fa[x]);
		return fa[x];
	}
}
void merge(int x,int y)
{
	x=find(x),y=find(y);
	if(dep[x]<=dep[y])
	{
		fa[x]=y;
	}
	else
	{
		fa[y]=x;
	}
	if(dep[x]==dep[y]&&x!=y)
	{
		dep[y]++;
	}
}
int main()
{
	int now=0;
	while(scanf("%d%d",&n,&m)==2&&(n||m))
	{
		init();
		while(m--)
		{
			int x,y;
			scanf("%d%d",&x,&y);
			merge(x,y);
		}
		set<int>ans;
		for(int i=1;i<=n;i++)
		{
			ans.insert(fa[i]);
		}
		printf("Case %d: %d\n",++now,ans.size());
	}
	return 0;
}

思路:

并查集后找祖宗个数。

2023/1/11 19:24
加载中...