AtCoder Beginner Contest 177 比赛人数9636
AtCoder Beginner Contest 177 D Friends 并查集中寻找最大数量元素的集合
总目录详见https://blog.youkuaiyun.com/mrcrack/article/details/104454762
在线测评地址https://atcoder.jp/contests/abc177/tasks/abc177_d
题目大意:并查集中寻找最大数量元素的集合
基本思路:并查集中寻找最大数量元素的集合
样例模拟如下:
5 3
1 2
3 4
5 1
3
(1,2,5),(3,4)
新的集合中,元素之间没有关系,那么需要按最多元素的集合进行拆分,先得到
(1),(2),(5)
再得到
(1,3),(2,4),(5)
AC代码如下:
#include <cstdio>
#include <algorithm>
#define maxn 200010
using namespace std;
int f[maxn],cnt[maxn];
int getf(int u){//找爸爸
return f[u]==u?u:f[u]=getf(f[u]);
}
void merge(int u,int v){//合并集合
int f1,f2;
f1=getf(u),f2=getf(v);
if(f1!=f2)f[f2]=f1;
}
int main(){
int n,m,i,u,v,mx=0;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)f[i]=i;
for(i=1;i<=m;i++)scanf("%d%d",&u,&v),merge(u,v);
for(i=1;i<=n;i++)cnt[getf(i)]++;//统计同一个父亲的集合元素的个数
for(i=1;i<=n;i++)mx=max(mx,cnt[i]);
printf("%d\n",mx);
return 0;
}