Cod sursa(job #3326676)

Utilizator Andrei1209Andrei Mircea Andrei1209 Data 29 noiembrie 2025 21:30:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

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

const int Nmax = 1e5 + 5;
int sef[Nmax], siz[Nmax];
int findSef( int x )
{
    if ( x == sef[x] )
        return x;
    return findSef(sef[x]);
}
void join( int a, int b )
{
    int x, y;
    x = findSef(a);
    y = findSef(b);

    if ( siz[x] > siz[y] )
    {
        siz[x] += siz[y];
        sef[y] = x;
    }
    else
    {
        siz[y] += siz[x];
        sef[x] = y;
    }
}
int main()
{
    int n, m, i;
    fin >> n >> m;
    for ( i = 1; i <= n; ++i )
    {
        sef[i] = i;
        siz[i] = 1;
    }

    for ( i = 1; i <= m; ++i )
    {
        int tip, x, y;
        fin >> tip >> x >> y;
        if ( tip == 1 )
        {
            join(x, y);
        }
        else
        {
            if ( findSef(x) == findSef(y) )
                fout << "DA\n";
            else
                fout << "NU\n";
        }
    }
    return 0;
}