Cod sursa(job #2845005)

Utilizator teochess2017Togan Teodor-Bogdan teochess2017 Data 6 februarie 2022 22:25:02
Problema Paduri de multimi disjuncte Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>
#include <stdlib.h>
int sef[100000];///uitasem vectorul declarat din reflex si am ocupat memorie in surplus:(
int find( int i ){
  if(i==sef[i]){
    return i;
  }else{
    return sef[i]=find( sef[i] );
  }
}
void unio( int i, int j ){
  int sefulluii,sefulluij;
  sefulluii=find( i );
  sefulluij=find( j );
  sef[sefulluij]=sefulluii;
}
int main()
{
    FILE *fin,*fout;
    int n,m,x,y,z,i,sefy,sefz;
    fin=fopen("disjoint.in","r");
    fscanf(fin,"%d%d",&n,&m);
    for(i=0;i<n;i++){
      sef[i]=i;
    }
    fout=fopen("disjoint.out","w");
    for(i=0;i<m;i++){
      fscanf(fin,"%d%d%d",&x,&y,&z);
      if(x==1){
        unio( y-1, z-1 );
      }else{
        sefy=find( y-1 );
        sefz=find( z-1 );
        if(sefy==sefz){
          fprintf(fout,"DA\n");
        }else{
          fprintf(fout,"NU\n");
        }
      }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}