Cod sursa(job #2917754)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 7 august 2022 15:15:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <cstdio>

const int max_n = 100005;

int n, m, tip, x, y;
int c[max_n];

int find(int x) {
  int p = x;

  while(c[p] != p) {
    p = c[p];
  }

  while(x != p) {
    int t = c[x];
    c[x] = p;
    x = t;
  }

  return x;
}

void unite(int x, int y) {
  c[find(x)] = find(y);
}

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

  scanf("%d%d", &n, &m);
  for(int i = 1; i <= n; i++) {
    c[i] = i;
  }

  for(int i = 1; i <= m; i++) {
    scanf("%d%d%d", &tip, &x, &y);

    if(tip == 1) {
      unite(x, y);
    } else {
      if(find(x) == find(y)) {
        printf("DA\n");
      } else {
        printf("NU\n");
      }
    }
  }

  return 0;
}