没啥说的,其实就是注意一下要让朋友的朋友有关系得再把father连上
#include<stdio.h>
#include<string.h>
#define max 30010
int father[max],visit[max],num[max];
int find(int a)
{
return father[a]==a?a:father[a]=find(father[a]);
}
void Union(int u,int v)
{
u=find(u);
v=find(v);
if(u!=v)
father[u]=v;
}
int main()
{
int t,n,m,a,b;
scanf("%d",&t);
while(t--)
{
memset(num,0,sizeof(num));
scanf("%d%d",&n,&m);
for(int i=0;i<max;i++)
{
father[i]=i;
}
for(int i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
Union(a,b);
}
for(int i=0;i<max;i++)
find(i);
int m=0;
for(int i=0;i<max;i++)
num[father[i]]++;
for(int i=0;i<max;i++){
m=m>num[i]?m:num[i];
}
printf("%d\n",m);
}
return 0;
}