Cod sursa(job #1605830)

Utilizator herbertoHerbert Mohanu herberto Data 19 februarie 2016 15:35:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#define MAXN 100001

using namespace std;

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

//int v[MAXN][3];
int main(){
  FILE*fin=fopen("disjoint.in", "r");
  FILE*fout=fopen("disjoint.out", "w");
  int n, k, p, a, b, i, x, y;
  fscanf(fin, "%d%d", &n, &k);
  for(i=1; i<=k; i++){
    fscanf(fin, "%d%d%d", &p, &x, &y);
    if(p==1)
      myunion(x, y);
    else{
      if(myfind(x)==myfind(y))
        fprintf(fout, "DA\n");
      else
        fprintf(fout, "NU\n");
    }
  }
  return 0;
}