Cod sursa(job #3289152)

Utilizator pacelaaaCiurea Pavel pacelaaa Data 25 martie 2025 21:10:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include<algorithm>

using namespace std;

ifstream cin ( "disjoint.in" );
ofstream cout( "disjoint.out" );

const int Nmax = 1e5 + 5;

int parinte[Nmax], sz[Nmax];

int parent( int nod ) {
  if( parinte[nod] == nod )
    return nod;

  parinte[nod] = parent( parinte[nod] );
  return parinte[nod];
}

void merge_sets( int u, int v ) {
  u = parent( u );
  v = parent( v );

  if( u == v )
    return;

  if( sz[u] < sz[v] )
    swap( u, v );

  parinte[v] = u;
  if( sz[u] == sz[v] )
    sz[u] ++;
}


int main()
{
    int n, queries, x, y, operatie, i;

    cin >> n >> queries;

    for( i = 1; i < n + 1; i ++ )
      parinte[i] = i, sz[i] = 1;

    for( i = 0; i < queries; i ++ ) {
      cin >> operatie >> x >> y;
      if( operatie == 1 )
        merge_sets( x, y );
      else
        if( parent( x ) == parent( y ) )
          cout << "DA\n";
        else
          cout << "NU\n";
    }
    return 0;
}