题意
给你一些不同颜色的袜子,你要把它们放到一个容器中配对,如果能使所有的袜子配对成功,问这个容器最小的容量是多少。
解题思路
用并查集进行配对,把每双有相同颜色的袜子都放在一个集合,因为编号较大需要用map代替数组来存,这里注意用普通map存因为查询次数过多会超时,所以用hashmap来代替,另外dfs也可以做
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100050;
unordered_map <int,int> f, p;
int ans;
int n, m;
struct node {
int x, y;
}q[MAXN];
int find(int x){
if(f[x]==x)return x;
else return f[x]=find(f[x]);
}
int main(){
ios::sync_with_stdio(false);
int t;
cin >> t;
while (t --){
cin >> n;
f.clear(), p.clear();
for (int i = 1; i <= n; i++) cin >> q[i].x >> q[i].y, f[q[i].x] = q[i].x, f[q[i].y] = q[i].y;
for (int i = 1; i <= n; i++){
int a, b;
a = q[i].x, b = q[i].y;
if (find(a) != find(b)) f[find(b)] = f[find(a)];
}
for (int i = 1; i <= n; i++){
p[find(q[i].x)] ++;
ans = max(ans, p[find(q[i].x)]);
}
cout << ans << endl;
ans = 0;
}
}