Cod sursa(job #3193128)

Utilizator Cyb3rBoltSbora Ioan-David Cyb3rBolt Data 14 ianuarie 2024 10:29:56
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, q, tata[100010], T, x, y;

int Find(int x) {
    int r = x;
    while(tata[r] != r) r = tata[r];
    while(tata[x] != r) {
        int tmp = tata[x];
        tata[x] = r;
        x = tmp;
    }
    return r;
}

void Unite(int x, int y) {
    x = Find(x);
    y = Find(y);
    tata[y] = x;
}

int main()
{
    fin >> n >> q;
    for(int i=1; i<=n; i++) tata[i] = i;
    for(int i=1; i<=q; i++) {
        fin >> T >> x >> y;
        if(T == 1 && Find(x) != Find(y)) Unite(x, y);
        else {
            if(Find(x) == Find(y)) fout << "DA" << '\n';
            else fout << "NU" << '\n';
        }
    }

    return 0;
}