Cod sursa(job #3214356)

Utilizator PescarusTanislav Luca Andrei Pescarus Data 14 martie 2024 08:37:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
using namespace std;
const int nmax = 100005;
int n, m;
int father[nmax];

int find(int node){
    if(father[node] < 0){
        return node;
    }
    int tata = find(father[node]);
    father[node] = tata;
    return tata;
}

void unite(int x, int y){
    int r_x = find(x);
    int r_y = find(y);
    if(r_x == r_y){
        return;
    }
    else {
        if(father[r_x] < father[r_y]){
            swap(r_x, r_y);
        }
        father[r_y] += father[r_x];
        father[r_x] = r_y;
    }
}
int main(){
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    f >> n >> m;
    for(int i = 1; i <= n; i++){
        father[i] = -1;
    }
    while(m--){
        int x, y, z;
        f >> z >> x >> y;
        if(z == 2){
            if(find(x) == find(y)){
                g << "DA" << '\n';
            }
            else g << "NU" << '\n';
        }
        else if(z == 1){
            unite(x, y);
        }
    }
}