题意:
告诉你那些人是朋友,朋友的朋友也是朋友,求最大朋友圈
思路:
并查集,用一个数组来累加每个根
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int n, m;
const int maxn = 30005;
int f[maxn];
int g[maxn];
int cmp(int a, int b) {
return a>b;
}
int find(int x) {
return x==f[x]?x:find(f[x]);
}
void uni(int a, int b) {
a = find(a);
b = find(b);
f[a] = b;
}
void count() {
for(int i=1; i<=n; i++) {
int x = find(i);
g[x]++;
}
sort(g+1, g+n+1, cmp);
printf("%d\n", g[1]);
}
int main() {
int kase;
int a, b;
scanf("%d", &kase);
while(kase--) {
memset(g, 0, sizeof(g));
scanf("%d%d", &n, &m);
for(int i=1; i<=n; i++) f[i] = i;
for(int i=0; i<m; i++) {
scanf("%d%d", &a, &b);
uni(a, b);
}
count();
}
return 0;
}