OWL FIGHT HACKEREARTH

#include<bits/stdc++.h>
using namespace std;
int const N=1e5;
int arr[N]={0},size[N]={0}, m[N]={0};

void initialise(int nodes){
    for(int i=0;i<=nodes;i++){
        arr[i]=i;
        m[i]=i;
        size[i]=1;
    }
    return;
}

int root(int i){

    while(i!=arr[i]){
        i=arr[i];
    }
    return i;
}



void wunion(int i, int j){
    int root_a =root(i);
    int root_b =root(j);
    if(root_a==root_b) return;
    if(size[root_a]>size[root_b]){
        arr[root_b]=arr[root_a];
        size[root_a]+=size[root_b];
        size[root_b]=0;
        if(m[root_a]<=m[root_b]) m[root_a]=m[root_b];
    }
    else{
        arr[root_a]=arr[root_b];
        size[root_b]+=size[root_a];
        size[root_a]=0;
        if(m[root_b]<=m[root_a]) m[root_b]=m[root_a];
    }
    return;
}

int main() {
    int nodes, no_us;
    cin>>nodes>>no_us;
    initialise(nodes);
    int a,b;
    for(int i=0;i<no_us;i++){
        cin>>a>>b;
        wunion(a,b);
    }
    int q; cin>>q;
    for(int i=0;i<q;i++){
        cin>>a>>b;
        int root_a= root(a);
        int root_b= root(b);
        if(m[root_a]>m[root_b]) cout<<a<<"\n";
        else if (m[root_a]<m[root_b]) cout<<b<<"\n";
        else cout<<"TIE"<<"\n";
    }
    return 0;
}

Comments