Cod sursa(job #2574429)

Utilizator vmnechitaNechita Vlad-Mihai vmnechita Data 5 martie 2020 22:13:04
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
#define NMAX 100005

using namespace std;

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

int t[NMAX], lg[NMAX];

void uneste ( int x, int y );
int radacina ( int x );

int main()
{
    int n, m, i, p, x, y;

    fin >> n >> m;
    for ( i = 1 ; i <= n ; i++ ) t[i] = i, lg[i] = 1;
    while ( m-- )
    {
        fin >> p >> x >> y;
        if ( p == 1 ) uneste ( x, y );
        else
        {
            if ( radacina ( x ) == radacina ( y ) ) fout << "DA" << '\n';
            else fout << "NU" << '\n';
        }
    }

    return 0;
}

void uneste ( int x, int y )
{
    if ( lg[x] < lg[y] ) lg[x] += lg[y], t[x] = y;
    else lg[y] += lg[x], t[y] = x;
}

int radacina ( int x )
{
    if ( x != t[x] ) t[x] = radacina ( t[x] );

    return t[x];
}