Cod sursa(job #2730296)

Utilizator matthriscuMatt . matthriscu Data 26 martie 2021 00:34:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
using namespace std;

int Find(int nod, int Father[]) {
    int Rep = nod, temp;
    while(Rep != Father[Rep])
        Rep = Father[Rep];
    while(nod != Father[nod]) {
        temp = Father[nod];
        Father[nod] = Rep;
        nod = temp;
    }
    return Rep;
}

int main() {
    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");
    int n, m, q, x, y, Father[100001], Rank[100001] {}, i, RepX, RepY;
    fin >> n >> m;
    for(i = 1; i <= n; ++i)
        Father[i] = i;
    for(i = 1; i <= m; ++i) {
        fin >> q >> x >> y;
            if(q == 1) {
                RepX = Find(x, Father);
                RepY = Find(y, Father);
                if(Rank[RepX] > Rank[RepY]) {
                    ++Rank[RepX];
                    Father[RepY] = RepX;
                }
                else {
                    ++Rank[RepY];
                    Father[RepX] = RepY;
                }
            }
            else
                fout << (Find(x, Father) == Find(y, Father) ? "DA\n" : "NU\n");
    }
}