题目:求最大的集合的元素个数。
分析:并查集简单题目。
AC代码
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int N = 30005;
int pa[N], son[N];
int n,m;
void init() {
for(int i = 0; i <= n; i++) {
pa[i] = i;
son[i] = 1;
}
}
int find(int x) {
if(x == pa[x])
return x;
else
return find(pa[x]);
}
void Union(int x,int y) {
int r1 = find(x) , r2 = find(y);
if(r1 == r2)
return ;
if(r1 < r2) {
pa[r2] = r1;
son[r1] += son[r2];
}else {
pa[r1] = r2;
son[r2] += son[r1];
}
}
int main() {
int T, x, y;
scanf("%d", &T);
while(T--) {
scanf("%d%d",&n,&m);
init();
while(m--) {
scanf("%d%d", &x, &y);
Union(x,y);
}
int Max = -INF;
for(int i = 1; i <= n; i++) {
Max = max(Max, son[i]);
}
printf("%d\n",Max);
}
return 0;
}