Cod sursa(job #2286913)

Utilizator andra1782Andra Alazaroaie andra1782 Data 20 noiembrie 2018 23:31:26
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#define MAX 100001
FILE *fin,*fout;
int p[MAX],st[MAX];

int find(int x){
  int sp=0;
  while(p[x]!=x){
    st[sp++]=x;
    x=p[x];
  }
  for(int i=0; i<sp; i++)
    p[st[i]]=x;
  return x;
}

void Union(int x, int y){
  int m1=find(x);
  int m2=find(y);
  p[y]=x;
}

int main(){
    fin=fopen("disjoint.in","r");
    fout=fopen("disjoint.out","w");
    int n,m,i,tip,x,y;

    fscanf(fin,"%d%d",&n,&m);
    for(i=1; i<=n; i++)
      p[i]=i;
    for(i=0; i<m; i++){
      fscanf(fin,"%d%d%d",&tip,&x,&y);
      if(tip==1)
        Union(x,y);
      else if(find(x)==find(y))
        fprintf(fout,"DA\n");
      else
        fprintf(fout,"NU\n");
    }
    fclose(fin);
    fclose(fout);
    return 0;
}