题意:一个市镇有N个居民。已知有若干对是朋友,根据著名的说法“我的朋友的朋友也是我的朋友“,可以推导出如果A和B是朋友,并且B和C是朋友,则A和C是朋友。请你计算在最大的朋友团体中有多少人。
思路:典型的并查集,没什么好说的。
#include<iostream>
using namespace std;
int f[30005],s[30005];
int find(int x)
{
return f[x]==x?x:f[x]=find(f[x]);
}
int main()
{
int t,n,m,i,x,y;
cin>>t;
while(t--)
{
cin>>n>>m;
int max=1;
for(i=1;i<=n;i++)
{
f[i]=i;
s[i]=1;
}
for(i=0;i<m;i++)
{
cin>>x>>y;
x=find(x);
y=find(y);
if(x!=y)
{
f[x]=y;
s[y]+=s[x];
max=(s[y]>max)?s[y]:max;
}
}
cout<<max<<endl;
}
return 0;
}