#include <cstdio>
#include <iostream>
#include<algorithm>
using namespace std;
const int N = 100005;
int par[N],
Rank[N];
void init(int n) {
for (int i = 0; i <= n; i++) {
par[i] = i;
Rank[i] = 1;
}
}
int find(int x) {
if (par[x] == x) return x;
else return par[x] = find(par[x]);
}
void unite(int x, int y) {
x = find(x);
y = find(y);
if (x == y) return;
if (Rank[x] <= Rank[y]) {
par[x] = y;
Rank[y] += Rank[x];
}
else {
par[y] = x;
Rank[x] += Rank[y];
}
}
int main()
{
int t;
cin >> t;
for (int i = 0; i < t;i++) {
int n;
cin >> n;
init(2*n);
for (int j = 0; j < n;j++) {
int a, b;
cin >> a >> b;
unite(a, b);
}
int maxValue = *max_element(Rank, Rank + 2*n);
cout <<maxValue<<endl;
}
return 0;
}
并查集模板
最新推荐文章于 2021-12-15 00:30:14 发布