Cod sursa(job #3281606)

Utilizator RenoxelRosu David Renoxel Data 2 martie 2025 17:37:30
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#include <vector>

using namespace std;

int n, m;

vector<int> sz;

int Find(int nod)
{
    if (sz[nod] < 0)
        return nod;
    return Find(sz[nod]);
}

void Union(int a, int b)
{
    if (a == b)
        return;
    if (a > b)
        swap(a, b);
    sz[a] += sz[b];
    sz[b] = a;
}

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

    cin >> n >> m;
    sz.resize(n + 2, -1);

    for (int i = 1; i <= m; ++i)
    {
        int cod, x, y;
        cin >> cod >> x >> y;
        if (cod == 1 && Find(x) != Find(y))
            Union(Find(x), Find(y));
        else if (Find(x) == Find(y))
            cout << "DA\n";
        else
            cout << "NU\n";
    }

    cin.close();
    cout.close();
    return 0;
}