Cod sursa(job #2848541)

Utilizator Alex_HossuHossu Alexandru Alex_Hossu Data 12 februarie 2022 19:51:52
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>

#define N_MAX 100000

int v[N_MAX + 1];

int myFind(int x);

void myUnite(int x, int y) {
  int a, b;
  a = myFind(x);
  b = myFind(y);
  if (a != b)
    v[a] = b;
}

int myFind(int x) {
  if (x == v[x])
    return x;
  return v[x] = myFind(v[x]);
}

int main() {
  FILE *fin, *fout;
  int n, m;
  int i, op;
  int x, y;

  fin = fopen("disjoint.in", "r");
  fout = fopen("disjoint.out", "w");

  fscanf(fin, "%d%d", &n, &m);

  for (i = 1; i <= n; i++)
    v[i] = i;

  for (i = 0; i < m; i++) {
    fscanf(fin, "%d%d%d", &op, &x, &y);
    if (op == 1) {
      myUnite(x, y);
    } else {
      if (myFind(x) == myFind(y))
        fprintf(fout, "DA\n");
      else
        fprintf(fout, "NU\n");
    }
  }

  fclose(fin);
  fclose(fout);

  return 0;
}