Cod sursa(job #1917060)

Utilizator QAZRDXAlexandru QAZRDX Data 9 martie 2017 11:02:13
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <iostream>
#include <fstream>

std::ifstream f("disjoint.in");
std::ofstream g("disjoint.out");

int v[100005];

int root(int x){
  int radacina, temp;
  radacina = x;
  while (v[radacina] != radacina) {
    radacina = v[radacina];
  }
  while(v[x] != x){
    temp = v[x];
    v[x] = radacina;
    x = temp;
  }
}

int join(int x, int y){
  v[y] = root(x);
}

int main(int argc, char const *argv[]) {
  int n, m, x, y, cod;
  f>>n>>m;
  for(int i=1; i<=n; ++i){
    v[i] = i;
  }
  for(int i=0; i<m; ++i){
    f>>cod>>x>>y;
    if (cod == 1) {
      join(x, y);
    } else {
      if(root(x) == root(y)){
        g<<"DA\n";
      } else {
        g<<"NU\n";
      }
    }
  }
  return 0;
}