1272. Non-Yekaterinburg Subway Solution Timus

#include <iostream>
#include <vector>
#include <bitset>
// #include <algorithm>
// #include <stack>
using namespace std;
vector<int> p(10001),rnk(10001,1);
int find(int a){
    return p[a]==a?a:p[a]=find(p[a]);
}
bool same(int a,int b){
    return find(a)==find(b);
}
void merge(int a,int b){
    if(!same(a,b)){
        if(rnk[find(a)]>rnk[find(b)]){
            // num[find(a)]+=num[find(b)];
            p[find(b)]=find(a);
        }
        else {
            // num[find(b)]+=num[find(a)];
            p[find(a)]=find(b);
        }
        if(rnk[find(a)]==rnk[find(b)])
            rnk[find(b)]++;
    }
}

int main(){
    int n,t,b;
    cin>>n>>t>>b;
    for(int i=1;i<=n;i++)
        p[i]=i;
    for(int i=0;i<t;i++){
        int x,y;
        cin>>x>>y;
        merge(x,y);
    }
    int ans=0;
    for(int i=0;i<b;i++){
        int x,y;
        cin>>x>>y;
        if(!same(x,y)){
            merge(x,y);
            ans++;
        }
    }
    cout<<ans<<endl;

}

Comments