➤ Problem Link : 731C. Socks
✅ C++ Solution :
#include<bits/stdc++.h> using namespace std; #define ll long long int ll parent[2*100001]; ll color[2*100001]; ll size[2*100001]; ll test(ll v) { if(parent[v]==v) return v; return parent[v]=test(parent[v]); } int main() { ll n,m,k,l,r,p1,p2; cin>>n>>m>>k; for(ll i=1;i<=n;i++) { cin>>color[i]; parent[i]=i; size[i]=1; } for(ll i=1;i<=m;i++) { cin>>l>>r; p1 = test(l); p2 = test(r); if(p1!=p2) { parent[p2]=p1; size[p1]+=size[p2]; } } map<ll,unordered_map<ll,ll> > mp; for(ll i=1;i<=n;i++) { // cout<<i<<" "<<parent[i]<<endl; parent[i]=test(i); mp[parent[i]][color[i]]++; } int ans=0; for(auto it = mp.begin();it!=mp.end();it++) { ll maxi = -1; for(auto it2=(*it).second.begin();it2!=(*it).second.end();it2++) if((*it2).second > maxi) maxi = (*it2).second; // cout<<size[(*it).first]<<" "<<maxi<<endl; ans+=size[(*it).first]-maxi; } cout<<ans; }
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!