Cod sursa(job #2574480)

Utilizator vmnechitaNechita Vlad-Mihai vmnechita Data 5 martie 2020 22:50:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 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, nr = 0;

    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[radacina(x)] = radacina ( y );
    else lg[y] += lg[x], t[radacina(y)] = radacina ( x );
}

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

    return t[x];
}