题意:每次都给出有关系的男生,求最大的关系网。
分析:建立并查集,并不是求集合的个数而是求其中的元素的个数,用一个num【】数组记录就可以了。
收获:刚开始学习并查集,并查集的思想领会了一点。。。。。(太菜了)
参考大佬ac:
#include <stdio.h>
int father[10000000 ],num[10000000 ];
void initial ()
{
int i;
for( i=1;i<10000000 ;i++)
{
father[i]=i;
num[i]=1;
}
}
int find (int x)
{
if(father[x]!=x)
{
father[x]=find(father[x]);
}
return father[x];
}
void merge (int a,int b)
{
int p=find(a);
int q=find(b);
if(p!=q)
{
father[p]=q;
num[q]+=num[p];
}
return ;
}
int main ()
{
int m;
while(scanf("%d",&m)!=EOF)
{
if(m==0)
{
printf("1\n");
continue;
}
int a,b;
initial();
int max=0;
while(m--)
{
scanf("%d%d",&a,&b);
if(a>max) max=a;
if(b>max) max=b;
merge(a,b);
}
int maxn=0;
int i;
for( i=0;i<max;i++)
{
if(num[i]>maxn)
{
maxn=num[i];
}
}
printf("%d\n",maxn);
}
return 0;
}