Cod sursa(job #2867865)

Utilizator marcpopPop Marc Alexandru marcpop Data 10 martie 2022 16:38:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

int linkU[100002];
int sizeU[100002];

int n, m, a, b, c;

int findU(int x) {

    while (x != linkU[x]) x = linkU[x];
    return x;

}

bool sameU(int a, int b) {

    return findU(a) == findU(b);

}

void uniteU(int a, int b) {

    a = findU(a);
    b = findU(b);

    if (sizeU[a] < sizeU[b]) swap(a, b);

    sizeU[a] += sizeU[b];
    linkU[b] = a;

}

int main()
{

    fin>>n>>m;

    for (int i=1; i<=n; i++) {
        linkU[i] = i;
        sizeU[i] = 1;
    }

    for (int i=1; i<=m; i++) {

        fin>>c>>a>>b;

        if (c == 1) {

            uniteU(a, b);

        }
        else if (c == 2) {

            if (sameU(a, b)) fout<<"DA\n";
            else fout<<"NU\n";

        }

    }

    return 0;
}