Cod sursa(job #2802172)

Utilizator redikusTiganus Alexandru redikus Data 17 noiembrie 2021 18:09:58
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>

using namespace std;

void disjoint(istream & in, ostream & out) {

    int n, m;
    in >> n >> m;

    vector< int > tata(n + 1);

    for(int i = 1; i < tata.size(); i++) {
        tata[i] = i;
    }

    for(int i = 0; i < m; i++) {
        int tip, nod1, nod2;
        in >> tip >> nod1 >> nod2;
        if(tip == 1){
            if(nod1 > nod2){
                tata[nod1] = nod2;
            }
            else{
                tata[nod2] = nod1;
            }
        }
        else{
            int tata1 = nod1, tata2 = nod2;
            while(tata[tata1] != tata1){
                tata1 = tata[tata1];
            }
            while(tata[tata2] != tata2){
                tata2 = tata[tata2];
            }
            if(tata1 == tata2){
                out << "DA\n";
            }
            else{
                out << "NU\n";
            }
        }
    }


}

void disjointDriver() {
    // Citire
    ifstream in ("disjoint.in");
    ofstream out("disjoint.out");

    disjoint(in, out);

}

int main() {
    // Se apeleaza functia corespunzatoare problemei
    disjointDriver();
    return 0;
}