Cod sursa(job #1416070)

Utilizator herbertoHerbert Mohanu herberto Data 7 aprilie 2015 11:13:58
Problema Paduri de multimi disjuncte Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100001

int sef[MAXN];
inline int myfind(int x){
  int stiva[MAXN], st;
  st=0;
  while(sef[x]>0){
    stiva[st]=x;
    st++;
    x=sef[x];
  }
  st--;
  while(st>0){
    sef[stiva[st]]=x;
    st--;
  }
  return x;
}
inline void myunion(int x, int y){
  sef[myfind(y)]=myfind(x);
}

int main(){
  FILE*fin=fopen("disjoint.in", "r");
  FILE*fout=fopen("disjoint.out", "w");
  int n, m, i, j, ok, op, x, y;
  fscanf(fin, "%d%d", &n, &m);
  for(i=1; i<=m; i++){
    fscanf(fin, "%d%d%d", &op, &x, &y);
    if(op==1)
      myunion(x, y);
    else{
      if(myfind(x)!=myfind(y))
        fprintf(fout ,"NU\n");
      else
        fprintf(fout, "DA\n");
    }
  }
  return 0;
}