Cod sursa(job #2886787)

Utilizator vlad2009Vlad Tutunaru vlad2009 Data 8 aprilie 2022 12:36:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>

const int MAX_N = 1e5;
int parent[1 + MAX_N], cnt[1 + MAX_N];

int root(int v) {
  if (parent[v] == v) {
    return v;
  }
  return parent[v] = root(parent[v]);
}

void unite(int u, int v) {
  u = root(u);
  v = root(v);
  if (u != v) {
    if (cnt[u] < cnt[v]) {
      std::swap(u, v);
    }
    parent[v] = u;
    cnt[u] += cnt[v];
  }
}

int main() {
  std::ifstream fin("disjoint.in");
  std::ofstream fout("disjoint.out");
  int n, q;
  fin >> n >> q;
  for (int i = 1; i <= n; i++) {
    parent[i] = i;
    cnt[i] = 1;
  }
  while (q--) {
    int t, u, v;
    fin >> t >> u >> v;
    if (t == 1) {
      unite(u, v);
    } else {
      if (root(u) == root(v)) {
        fout << "DA\n";
      } else {
        fout << "NU\n";
      }
    }
  }
  return 0;
}