题意
宝宝洗袜子,宝宝起初有n对袜子需要清洗,每对袜子都有相同的颜色,用数字表示,例如{1,1}是一对袜子,{5,5}是一对颜色相同的袜子。
宝宝可以把袜子放到桶里使用魔法,但是桶里的袜子一次必须要完全匹配,不能出现不能匹配的袜子。
输出桶的最小容量
分析
并查集,合并关联的袜子放入同一个组中,最后计算组的最大大小。
这题要使用unordered_map
代码
#include<iostream>
#include<unordered_map>
using namespace std;
unordered_map<int,int>mp;
unordered_map<int,int>ansmap;
int find(int x){
if(mp[x]==x) return x;
return mp[x]=find(mp[x]);
}
void merge(int x,int y){
mp[find(x)]=find(y);
}
void solve(){
mp.clear();
ansmap.clear();
int n;cin>>n;
int a[n+2],b[n+2];
for(int i=1;i<=n;i++) {cin>>a[i]>>b[i];mp[a[i]]=a[i],mp[b[i]]=b[i];}
for(int i=1;i<=n;i++) merge(a[i],b[i]);
int ans=0;
for(auto x:mp){
ansmap[find(x.first)]++;
ans=max(ans,ansmap[find(x.first)]);
}
cout<<ans<<endl;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int T;cin>>T;
while(T--) solve();
}