Cod sursa(job #2437038)

Utilizator catalintermureTermure Catalin catalintermure Data 8 iulie 2019 11:07:53
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>

using namespace std;

ifstream inf("disjoint.in");
ofstream outf("disjoint.out");

const int NMAX = 100001;

int ant[NMAX], h[NMAX];

int main() {
    int n, m;
    inf >> n >> m;
    for(int i = 1; i <= n; i++) {
        ant[i] = i;
        h[i] = 1;
    }
    int q, a, b;
    for(int i = 0; i < m; i++) {
        inf >> q >> a >> b;
        if(q == 1) {
            while(ant[a] != a) {
                ant[a] = ant[ant[a]];
                a = ant[a];
            }
            while(ant[b] != b) {
                ant[b] = ant[ant[b]];
                b = ant[b];
            }
            if(h[a] > h[b]) {
                ant[b] = a;
            }
            else {
                ant[a] = b;
            }
            if(h[a] == h[b]) {
                h[a] = h[b] = h[a] + 1;
            }
        }
        else {
            while(ant[a] != a) {
                ant[a] = ant[ant[a]];
                a = ant[a];
            }
            while(ant[b] != b) {
                ant[b] = ant[ant[b]];
                b = ant[b];
            }
            if(a == b) {
                outf << "DA\n";
            }
            else {
                outf << "NU\n";
            }
        }
    }
    return 0;
}