Cod sursa(job #2019771)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 8 septembrie 2017 14:46:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>
#define DMAX 100002

using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");

struct arbore{
  int tata;
  int inaltime;
}nod[DMAX];

int n, m;

int radacina(int plecNod){
  if(nod[plecNod].tata == plecNod){
    return plecNod;
  }else{
    nod[plecNod].tata=radacina(nod[plecNod].tata);
    return nod[plecNod].tata;
  }
}


void reuniune(int a, int b, int tataA, int tataB){
  if(nod[tataA].inaltime > nod[tataB].inaltime){
    nod[tataB].tata = tataA;
    nod[tataB].inaltime = 1 + nod[tataA].inaltime;
  }else{
    nod[tataA].tata = tataB;
    nod[tataA].inaltime = 1 + nod[tataB].inaltime;
  }
}

int main(){
  in >> n >> m;
  for(int i = 1; i <= n; i++){
    nod[i].tata = i;
  }
  for(int i = 1; i <= m; i++){
    int tip, a, b;
    in >> tip >> a >> b;
    int tataA, tataB;
    tataA = radacina(a);
    tataB = radacina(b);
    if(tip == 1){
      reuniune(a, b, tataA, tataB);
    }else{
      if(tataA == tataB){
        out << "DA\n";
      }
      else{
        out << "NU\n";
      }
    }
  }
  return 0;
}