Cod sursa(job #2738432)

Utilizator bogdanvladmihaiBogdan Vlad-Mihai bogdanvladmihai Data 5 aprilie 2021 20:26:35
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>

using namespace std;

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

const int max_n = (int)1e5 + 5;

int n, m;

int dad[max_n];

int size[max_n];

int get(int u) {
  if (dad[u] == u) {
    return u;
  }
  return dad[u] = get(dad[u]);
}

void join(int u, int v) {
  if (size[u] < size[v]) {
    swap(u, v);
  }
  dad[v] = u;
  size[u] += size[v];
}

int main() {
  in >> n >> m;
  for (int i = 1; i <= n; i++) {
    dad[i] = i;
    size[i] = 1;
  }
  for (int i = 1; i <= m; i++) {
    int op, x, y;
    in >> op >> x >> y;
    x = get(x);
    y = get(y);
    if (op == 1) {
      join(x, y);
    } else {
      out << ((x == y) ? "DA\n" : "NU\n");
    }
  }
  return 0;
}