Cod sursa(job #2801383)

Utilizator petrescu_bogdanBogdan Petrescu petrescu_bogdan Data 16 noiembrie 2021 09:43:43
Problema Paduri de multimi disjuncte Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <stdio.h>
#define MMAX 100000

int sef[MMAX+1];
int find( int i ) {
  if(sef[i]==i)
    return i;
  return sef[i]=find(sef[i]);
}

void unionm(int i,int j) {
  int sefi, sefj;
  sefi=find(i);
  sefj=find(j);
  sef[sefj]=sefi;
}
int main() {
  FILE *fin,*fout;
  fin=fopen("disjoint.in","r");
  fout=fopen("disjoint.out","w");

  int n,m,i,c,x,y;
  fscanf(fin,"%d%d",&m,&n);
  for(i=1;i<=MMAX;i++)/// seful fiecarui numar (la inceput) este el insusi
    sef[i]=i;
  for(i=0;i<n;i++) {
    fscanf(fin,"%d%d%d",&c,&x,&y);
    if(c==1)
      unionm(x,y);
    else
      if(find(x)==find(y))
        fprintf(fout,"DA\n");
      else
        fprintf(fout,"NU\n");
  }

  fclose(fin);
  fclose(fout);
  return 0;
}