Cod sursa(job #2515855)

Utilizator euyoTukanul euyo Data 29 decembrie 2019 17:18:12
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>

int A[100000];

int root( int i ) {
  int node, poz;

  node = A[i];
  poz = i;
  while ( node > 0 ) {
    poz = node;
    node = A[node];
  }
  return poz;
}

int main() {
  FILE *fin = fopen( "disjoint.in", "r" );
  FILE *fout = fopen( "disjoint.out", "w" );
  int n, m, i, op, x, y, rx, ry;

  fscanf( fin, "%d%d", &n, &m );
  for ( i = 1; i <= n; ++i ) {
    A[i] = -1;
  }
  for ( i = 0; i < m; ++i ) {
    fscanf( fin, "%d%d%d", &op, &x, &y );
    if ( op == 2 ) {
      rx = root( x );
      ry = root( y );
      if ( rx == ry ) {
        fprintf( fout, "DA\n" );
      } else {
        fprintf( fout, "NU\n" );
      }
    } else {
      rx = root( x );
      ry = root( y );
      A[rx] = ry;
    }
  }
  fclose( fin );
  fclose( fout );
  return 0;
}