Cod sursa(job #2638757)

Utilizator andreic06Andrei Calota andreic06 Data 29 iulie 2020 17:21:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <iostream>
#include <fstream>

using namespace std;
const int N = 1e5;

ifstream fin ( "disjoint.in" );
ofstream fout ( "disjoint.out" );

int boss[N+1];

int find_set ( int x ) {
   if ( boss[x] == x )
     return x;
   return boss[x] = find_set ( boss[x] );
}

void union_set ( int x, int y ) {
    int sef_x = find_set ( x );
    int sef_y = find_set ( y );

    boss[sef_x] = sef_y;
}

int main()
{
   int n, k;
   fin >> n >> k;

   for ( int i = 1; i <= n; i ++ )
      boss[i] = i;

   for ( int i = 0; i < k; i ++ ) {
      int test, x, y;
      fin >> test >> x >> y;
      if ( test == 1 )
        union_set ( x, y );
      else {
        if ( find_set ( x ) == find_set ( y ) )
          fout << "DA";
        else
          fout << "NU";
        fout << '\n';
      }
   }
}