Cod sursa(job #3193079)

Utilizator Cyb3rBoltSbora Ioan-David Cyb3rBolt Data 13 ianuarie 2024 22:41:21
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

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

int Find(int a, int tata[]) {
    int b = a, t;
    while(b != tata[b]) b = tata[b];
    while(a != b) {
        t = tata[a];
        tata[a] = b;
        a = t;
    }
    return a;
}

int Unite(int a, int b, int tata[]) {
    a = Find(a, tata);
    b = Find(b, tata);
    tata[b] = a;
}

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, tata) != Find(y, tata)) Unite(x, y, tata);
        else {
            if(Find(x, tata) == Find(y, tata)) fout << "DA" << '\n';
            else fout << "NU" << '\n';
        }
    }

    return 0;
}