Cod sursa(job #2817663)

Utilizator GrandmasterSoucup Bogdan Grandmaster Data 13 decembrie 2021 23:22:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>
#include <stdio.h>
#include <unordered_map>

using namespace std;

int32_t parents(int32_t *sets, int32_t a) {
  if(a == sets[a]) {
    return a;
  }
  sets[a] = parents(sets, sets[a]);
  return sets[a];
}

void add(int32_t *sets, int32_t a, int32_t b) {
  sets[parents(sets, b)] = parents(sets, a);
}

int main() {
  FILE *fd = fopen("disjoint.in", "r+");
  FILE *fr = fopen("disjoint.out", "w+");
  int32_t n, m, *sets;
  fscanf(fd, "%d %d", &n, &m);
  sets = (int32_t *)malloc((n + 1) * sizeof(int32_t));
  for(int32_t i = 1; i <= n; i++) {
    sets[i] = i;
  }
  for(int32_t i = 0; i < m; i++) {
    int32_t a, b, c;
    fscanf(fd, "%d %d %d", &a, &b, &c);
    if(a == 1) {
      add(sets, b, c);
    }
    else {
      fprintf(fr, "%s\n", parents(sets, b) == parents(sets, c) ? "DA" : "NU");
    }
  }
}