Cod sursa(job #3167830)

Utilizator TomaBToma Brihacescu TomaB Data 11 noiembrie 2023 09:59:45
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>

using namespace std;

int zhk[100003], gr[100003];

int find_set(int a)
{
    if (zhk[a] == a)
        return a;
    return zhk[a] = find_set(zhk[a]);

}

void union_sets(int a, int b)
{
    a = find_set(a);
    b = find_set(b);
    if (a != b)
    {
        if (gr[a] < gr[b])
        {
            swap(a, b);
        }
        zhk[b] = a;
        gr[a] += gr[b];
    }
}

int main()
{
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    int n, m;
    cin >> n >> m;

    for (int i = 1; i <= n; i++) zhk[i] = i, gr[i]=1;
    while (m--)
    {
        int tip, x, y;
        cin >> tip >> x >> y;
        if (tip == 1)
        {
            union_sets(x, y);
        }
        else
        {
            if (find_set(x) == find_set(y)) cout << "DA\n";
            else cout << "NU\n";
        }
    }
    return 0;
}