Cod sursa(job #1701073)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 12 mai 2016 08:19:35
Problema Paduri de multimi disjuncte Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.85 kb
#include <stdio.h>

#define NMAX 100000
#define QUESTIONS 100000

int sef[ NMAX ] ;

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


void myunion (int poz1, int poz2 ) {
  sef[find(poz1)] = sef[find(poz2)] ;
}

int main()
{
  FILE *fin, *fout ;
  fin = fopen ("disjoint.in", "r" ) ;
  fout = fopen ("disjoint.out", "w" ) ;
  int n, i, elem, k, tip, poz1, poz2 ;

  fscanf (fin, "%d%d", &n, &k ) ;

  for (i = 1 ; i <= n ; i++ ) {
    sef[i] = i ;
  }
  for (i = 1 ; i <= k ; i++ ) {
    fscanf (fin, "%d%d%d", &tip, &poz1, &poz2 ) ;

    if (tip == 2 ) {
      if (find(poz1) == find(poz2) )
        fprintf (fout, "DA\n" ) ;
      else
        fprintf (fout, "NU\n" ) ;
    }
    else {
      myunion (poz1, poz2 ) ;
    }
  }
  return 0;
}