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
Post a Comment