Cod sursa(job #2077415)

Utilizator Andrei243Nitu Mandel Andrei Andrei243 Data 28 noiembrie 2017 00:37:36
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb

#include <fstream>
#include <stdio.h>
using namespace std;
int tati[100100];
int rang[100100];
ifstream in("disjoint.in");
ofstream out("disjoint.out");



int tata_suprem(int a){

if(tati[a]==a)return a;

else{
a=tata_suprem(tati[a]);
tati[a]=a;
return a;

}

}


void aceeasi(int a,int b){
if(tata_suprem(a)==tata_suprem(b))out<<"DA"<<'\n';
else out<<"NU"<<'\n';


}

void unite(int a,int b){
int sup_a=tata_suprem(a);
int sup_b=tata_suprem(b);
if(rang[sup_a]>=rang[sup_b]){
tati[sup_b]=sup_a;
if(rang[sup_a]==rang[sup_b])rang[a]++;
}
else {
tati[sup_a]=sup_b;

}

}


int main()
{int n,nrop;
  in>>n>>nrop;
int op,arg1,arg2;
  for(int i=1;i<=n;i++){
  tati[i]=i;
  }

  for(int i=1;i<=nrop;i++){
  in>>op>>arg1>>arg2;

  if(op==1)

      unite(arg1,arg2);


  else aceeasi(arg1,arg2);


  }


    return 0;
}