Cod sursa(job #2848029)

Utilizator Ana_22Ana Petcu Ana_22 Data 12 februarie 2022 01:05:51
Problema Paduri de multimi disjuncte Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <stdio.h>
#include <stdlib.h>
#define NMAX 100000

int sef[NMAX];

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

void unire( int i, int j ) {
  int sefi, sefj;
  sefi = find( i );
  sefj = find( j );
  sef[sefj] = sefi;
}

int main() {
    FILE *fin, *fout;
    int n, m, i, c, x, y, sefi, sefj;
    fin = fopen( "disjoint.in", "r" );
    fout = fopen( "disjoint.out", "w" );
    fscanf( fin, "%d%d", &n, &m );
    for( i = 0; i < n; i++ )
      sef[i] = i;
    for( i = 0; i < m; i++ ) {
      fscanf( fin, "%d%d%d", &c, &x, &y );
      switch( c ) {
      case 1:
        unire( x, y );
        break;
      default:
        sefi = find( x );
        sefj = find( y );
        if( sefi == sefj )
          fprintf( fout, "DA\n" );
        else
          fprintf( fout, "NU\n" );
      }
    }
    fclose( fin );
    fclose( fout );
    return 0;
}