Cod sursa(job #2622919)

Utilizator anabatAna Batrineanu anabat Data 2 iunie 2020 10:23:54
Problema Paduri de multimi disjuncte Scor 40
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <stdlib.h>

#define NMAX 500

int sef[NMAX+1];

void unite(int x,int y){ ///sef[a]=b si toti cei sub a primesc b
  int i;
  sef[find(x)]=find(y);
}

int find(int x){
  if(sef[x]==x){
    return x;
  }
  sef[x]=find(sef[x]);
  return sef[x];
}

int verif(int x,int y){
  return(find(x)==find(y)); ///au ac sef => sunt in ac multime
}

int main()
{
  FILE *fin,*fout;
  fin=fopen("disjoint.in","r");
  fout=fopen("disjoint.out","w");

  int n,m,cod,x,y,i;
  fscanf(fin,"%d%d",&n,&m);
  for(i=1;i<=n;i++){
    sef[i]=i;
  }
  for(i=1;i<=m;i++){
    fscanf(fin,"%d%d%d",&cod,&x,&y);
    if(cod==1){
      unite(x,y);
    }
    else{
      if(verif(x,y)==1)
        fprintf(fout,"DA\n");
      else
        fprintf(fout,"NU\n");
    }
  }

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