Cod sursa(job #2953228)

Utilizator DenisacheDenis Ehorovici Denisache Data 10 decembrie 2022 18:10:05
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>

using namespace std;

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

#define cin fin
#define cout fout

const int MAX_N = 1e5;
int sizeOfSet[MAX_N];
int parent[MAX_N];

int findSet(int x)
{
    if (x == parent[x])
    {
        return x;
    }

    return parent[x] = findSet(parent[x]);
}

void unionSets(int a, int b)
{
    if (a == b)
    {
        return;
    }

    if (sizeOfSet[a] > sizeOfSet[b])
    {
        swap(a, b);
    }

    parent[b] = a;
    sizeOfSet[a] += sizeOfSet[b];
}

int main()
{
    ios::sync_with_stdio(false);

    int n, q;
    cin >> n >> q;

    for (int i = 0; i < n; i++)
    {
        parent[i] = i;
        sizeOfSet[i] = 1;
    }

    for (int i = 0; i < q; i++)
    {
        int queryType, a, b;
        cin >> queryType >> a >> b;

        if (queryType == 1)
        {
            unionSets(findSet(a), findSet(b));
        }
        else if (findSet(a) == findSet(b))
        {
            cout << "DA\n";
        }
        else
        {
            cout << "NU\n";
        }
    }

    return 0;
}