hdu 1856 More is better

题目链接

#include"stdio.h"
int set[10000001],sum[10000001],ans,max;
int find(int x)
{
	int r,i;
	r=x;
	while(r!=set[r])
		r=set[r];
    while(x!=set[x])
	{
		i=set[x];
		set[x]=r;
		x=i;
	}
	return r;
}
void merge(int x,int y)
{
	int fx,fy;
	fx=find(x);
	fy=find(y);
	set[fx]=fy;
}
int main()
{
	int i,x,y,n,t;
	while(scanf("%d",&n)!=EOF)
	{
		if(n==0)
		{
			printf("1\n");
			continue;
		}
		for(i=1;i<=10000000;i++)
		{
			set[i]=i;
			sum[i]=0;
		}
		max=-1;
		for(i=0;i<n;i++)
		{
			scanf("%d%d",&x,&y);
			if(x>max) max=x;
			if(y>max) max=y;
			merge(x,y);
		}
		ans=-1;
		for(i=1;i<=max;i++)
		{
			t=find(i);
			sum[t]++;
			if(sum[t]>ans)
				ans=sum[t];
		}
		printf("%d\n",ans);
	}
	return 0;
}


原文地址:https://www.cnblogs.com/yyf573462811/p/6365407.html