Cod sursa(job #2572558)

Utilizator bogdanvladmihaiBogdan Vlad-Mihai bogdanvladmihai Data 5 martie 2020 13:20:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MAX_N = 1e5 + 5;

int n, m;

int dad[MAX_N], grade[MAX_N];

int find_set(int x) {
  if (dad[x] == x)
    return x;
  return dad[x] = find_set(dad[x]);
}

void join(int x, int y) {
  int x_set, y_set;
  x_set = find_set(x);
  y_set = find_set(y);
  if (grade[x_set] < grade[y_set]) {
    grade[x_set] += grade[y_set];
    dad[y_set] = x_set;
  } else {
    grade[y_set] += grade[x_set];
    dad[x_set] = y_set;
  }
}

int main() {
  int op, x, y;
  fin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    dad[i] = i;
    grade[i] = 1;
  }
  while (m --) {
    fin >> op >> x >> y;
    if (op == 1) {
      join(x, y);
    } else {
      if (find_set(x) == find_set(y)) {
        fout << "DA\n";
      } else {
        fout << "NU\n";
      }
    }
  }
  return 0;
}