Cod sursa(job #2170812)

Utilizator futurengineerOana Rosca futurengineer Data 15 martie 2018 09:50:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>

using namespace std;

int n, op, o, x, y, p[100005], rang[100005];

void init() {
  for (int i = 1; i <= n; i++)
    p[i] = i;
}

void uniune(int r1, int r2) {
  if (rang[r1] > rang[r2])
    p[r2] = r1;
  else {
    p[r1] = r2;
    if (rang[r1] == rang[r2])
      rang[r2]++;
  }
}

int findset(int x) {
  while (p[x] != x)
    x = p[x];
  return x;
}

int main () {
  ifstream fi("disjoint.in");
  ofstream fo("disjoint.out");
  fi >> n >> op; init();
  for (int i = 1; i <= op; i++) {
    fi >> o >> x >> y;
    if (o == 1)
      uniune(findset(x), findset(y));
    else
      if (findset(x) == findset(y))
        fo << "DA\n";
      else
        fo << "NU\n";
  }
  return 0;
}