hdu1856

赤裸裸的并查集,数据较水,不过太大,注意超时,建立并查集一定要
遵循多包少,这样简化下一次的查找,缩短时间,还有,应该一边输入
关系,一边刷新元素最大值,这样之后就不用额外加个循环。总结还是
数据的处理能力吖......

#include<iostream>
int bin[10000002];
int flag[10000002];
int max;
int find(int x)
{
while(bin[x]!=x)
x=bin[x];
return x;
}
int merge(int x,int y)
{
int fy,fx;
fy=find(y);
fx=find(x);
if(fy!=fx)
{
if(flag[fx]>=flag[fy])
{
bin[fy]=fx;
flag[fx]+=flag[fy];
if(max<flag[fx]) max=flag[fx];
}
else
{
bin[fx]=fy;
flag[fy]+=flag[fx];
if(max<flag[fy]) max=flag[fy];
}
}
return 0;
}
int main(){
int i,x,y;
int n;
while(scanf("%d",&n)!=EOF)
{
max=1;
for(i=1;i<=10000000;i++)
{
bin[i]=i;
flag[i]=1;
}
for(i=0;i<n;i++)
{
scanf("%d %d",&x,&y);
merge(x,y);
}
printf("%d\n",max);
}
return 0;
}

 

你可能感兴趣的:(return,能力,最大值,元素)