Cod sursa(job #2848729)

Utilizator teodortatomirTeodor Tatomir teodortatomir Data 13 februarie 2022 10:47:49
Problema Paduri de multimi disjuncte Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXX 100001

int p[MAXX];
int find(int c) {
  if(c == p[c])
    return c;
  return p[c] = find(p[c]);
}
void unire(int i, int j) {
  int sefi, sefj;

  sefi = find(i);
  sefj = find(j);
  p[sefj] = sefi;
}
int main(){
  FILE *fin, *fout;
  int i, n, m, j, x, cer, sefi, sefj;

  fin = fopen("disjoint.in", "r");
  fout = fopen("disjoint.out", "w");
  fscanf(fin, "%d%d", &n, &m);

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

  for(x = 0; x < m; x++) {
    fscanf(fin, "%d%d%d", &cer, &i, &j);
    if(cer == 1)
      unire(i, j);
    else {
      sefi = find(i);
      sefj = find(j);
      if(sefi == sefj)
        fprintf(fout, "DA\n");
      else
        fprintf(fout, "NU\n");
    }
  }
  fclose(fin);
  fclose(fout);
  return 0;
}