Cod sursa(job #3254891)

Utilizator NemiNeemia Nemi Data 9 noiembrie 2024 09:46:42
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m;
int t[1000005], inalt[1000005];
int cod, x, y;

int rad(int nod)
{
    if(nod == t[nod])
        return nod;
    int rnod = rad(t[nod]);
    t[nod] = rnod;
    return nod;
}

void reuniune()
{
    int rx = rad(x);
    int ry = rad(y);
    if(inalt[rx] > inalt[rx])
        t[ry] = rx;
    else if(inalt[ry] > inalt[rx])
        t[rx] = ry;
    else{
        t[ry] = rx;
        inalt[rx]++;
    }
}

bool interogare()
{
    return (rad(x) == rad(y));
}

int main()
{
    fin >> n >> m;
    for(int i = 1; i <= n; i++)
        t[i] = i;
    for(;m;n--){
        cin >> cod >> x >> y;
        if(cod == 1)
            reuniune();
        else{
            if(interogare())
                cout << "DA\n";
            else
                cout << "NU\n";
        }

    }
    return 0;
}