Cod sursa(job #2700986)

Utilizator Ana_22Ana Petcu Ana_22 Data 29 ianuarie 2021 15:30:07
Problema Paduri de multimi disjuncte Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>
#include <stdlib.h>

int sef[100001];

int sef_suprem( int x ) {
  if( sef[x] == x )
    return x;
  return sef[x] = sef_suprem( sef[x] );
}

void unire( int a, int b ) {
  int sefa, sefb;
  sefa = sef_suprem( a );
  sefb = sef_suprem( b );
  sef[sefb] = sefa;
}

int main() {
    FILE *fin, *fout;
    int n, m, tip, x, y, i, sefx, sefy;
    fin = fopen( "disjoint.in", "r" );
    fout = fopen( "disjoint.out", "w" );
    fscanf( fin, "%d%d", &n, &m );
    for( i = 1; i <= n; i++ )
      sef[i] = i;
    for( i = 0; i < m; i++ ) {
      fscanf( fin, "%d%d%d", &tip, &x, &y );
      if( tip == 1 )
        unire( x, y );
      else {
        sefx = sef_suprem( x );
        sefy = sef_suprem( y );
        if( sefx == sefy )
          fprintf( fout, "DA\n" );
        else
          fprintf( fout, "NU\n" );
      }
    }
    fclose( fin );
    fclose( fout );
    return 0;
}