Cod sursa(job #2944044)

Utilizator federicisFedericis Alexandru federicis Data 21 noiembrie 2022 23:00:16
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>

using namespace std;

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

int n, m, colors[100001];

bool check(int nodmare, int nodmic){
    if(colors[nodmare] == nodmare){
        return (colors[nodmare] == colors[nodmic]);
    }
    check(max(colors[nodmare], nodmic), min(colors[nodmare],nodmic));
    colors[nodmare] = colors[colors[nodmare]];
    return (colors[nodmare] == colors[nodmic]);
}

int main() {
    in >> n >> m;
    for(int i = 1; i <= n; i++){
        colors[i] = i;
    }
    int nr, a, b;
    while(m--){
        in >> nr >> a >> b;
        if(nr == 1){
            colors[max(a,b)] = min(a, b);
        }
        else
        {
            out << (check(max(a, b), min(a, b)) ? "DA" : "NU") << '\n';
        }
    }
    return 0;
}