Cod sursa(job #2672794)

Utilizator abcabc123abc abc abcabc123 Data 14 noiembrie 2020 20:20:37
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>

using namespace std;

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

int n, q, r[100001], t[100001];

int cauta (int a) {
  int x = a, y;
  while (x != t[x])
    x = t[x];
  while (a != t[a]) {
    y = t[a];
    t[a] = x;
    a = y;
  }
  return x;
}

void uneste (int a, int b) {
  int x = cauta (a);
  int y = cauta (b);
  if (r[x] < r[y])
    t[x] = y;
  else
    t[y] = x;
  if (r[x] == r[y])
    r[x]++;
}

int main()
{
  fin >> n >> q;
  int op, a, b;
  for (int i = 1; i <= n; i++) {
    r[i] = 1; t[i] = i;
  }
  for (int i = 1; i <= q; i++) {
    fin >> op >> a >> b;
    if (op == 1)
      uneste (a, b);
    else
      if (cauta (a) == cauta (b))
        fout << "DA" << '\n';
      else
        fout << "NU" << '\n';
  }
  return 0;
}