Cod sursa(job #2757204)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 4 iunie 2021 15:22:59
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <cstdio>
#include <vector>

using namespace std;

vector<int> parent;

int findParent(int k) {
  if (parent[k] != k)
    parent[k] = findParent(parent[k]);
  return parent[k];
}

void Unite(int x, int y) {
  x = findParent(x);
  y = findParent(y);
  parent[y] = x;
}

int main()
{
  freopen("disjoint.in", "r", stdin);
  freopen("disjoint.out", "w", stdout);

  int N, M;
  scanf("%d%d", &N, &M);
  parent.resize(N + 1);
  
  for (int i = 1; i <= N; ++i)
    parent[i] = i;

  int op, x, y;
  for (int t = 0; t < M; ++t) {
    scanf("%d%d%d", &op, &x, &y);
    if (op == 1) {
      Unite(x, y);
      continue;
    }

    if (findParent(x) == findParent(y))
      printf("DA\n");
    else
      printf("NU\n");
  }
  
  return 0;
}