hdu 1856

 统计并查集里的最大元素个数

http://acm.hdu.edu.cn/showproblem.php?pid=1856

code:

 

#include <iostream>
using namespace std;
int bin[10000001];
int summ[10000001];
int find(int x)
{
	if(bin[x]!=x)
	{
		bin[x]=find(bin[x]);
		
	}
	return bin[x];
}

int main(int argc, char *argv[])
{
	int n;
	
	while(scanf("%d",&n)!=EOF)
	{
		int i;
		for(i=1;i<=10000000;i++)
		{
			bin[i]=i;		//并查集初始化 
			summ[i]=1;		//初始化 
		}
		int maxx=-1;
		for(i=1;i<=n;i++)
		{
			int a,b;
			scanf("%d%d",&a,&b);
			if(a>maxx)
			{
				maxx=a;
			}
			if(b>maxx)
			{
				maxx=b;
			}
			int af,bf;
			af=find(a);
			bf=find(b);
			if(af!=bf)
			{
				bin[af]=bf;
				summ[bf]+=summ[af];	//统计并集里的最大元素和 
			}
		}
		
//-------------输出结果------------------------
		int ir;
		int resulta=-1;
		for(ir=1;ir<=maxx;ir++)
		{
			if(resulta<summ[ir])
			{
				resulta=summ[ir];
			}
		} 
		if(n==0)
		{
			cout<<1<<endl;
		}else
		{
			cout<<resulta<<endl;
		}
		
	}
	return 0;
}



你可能感兴趣的:(hdu 1856)