当前位置: 代码迷 >> 综合 >> UVa - 10608 Friends (并查集)
  详细解决方案

UVa - 10608 Friends (并查集)

热度:39   发布时间:2023-10-09 17:14:37.0

题目大意:

朋友的朋友也是朋友,t 组测试用例 ,每组给出 n 和 m 分别代表 n 个人 ,m 个关系 ,接下来 m 行,每行给出 2 个数字 ,代表这两个人是朋友。求朋友组成的最大集体。

思路:

并查集 。


#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 30001
using namespace std;int p[N];
int num[N];	//记录朋友集合中的好友数 int find(int x){return p[x] == x ? x : p[x] = find(p[x]);
}void join(int x,int y){int fx = find(x);int fy = find(y);if(fx != fy) p[fx] = fy;
}bool cmp(int a,int b){return a>b;
}int t,n,m,a,b;
int main(){scanf("%d",&t);while(t--){//初始化 memset(num,0,sizeof(num));for(int i=0 ;i<N ;i++){p[i] = i;}//输入数据 scanf("%d%d",&n,&m);for(int i=0 ;i<m ;i++){scanf("%d%d",&a,&b);join(a,b);}//计算朋友数  for(int i=0 ;i<N ;i++){num[find(i)]++;}sort(num,num+N,cmp);printf("%d\n",num[0]);		}return 0;
}