Cod sursa(job #3360156)

Utilizator RaresPanuPanu Rares RaresPanu Data 9 iulie 2026 14:50:36
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <vector>

using namespace std;

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

struct padure {
    vector <int> padre;
    padure(int n) {
        padre.resize(n+1);
    }
    int rad(int x) {
        if (padre[x]==0) {
            return x;
        }
        padre[x]=rad(padre[x]);
        return padre[x];
    }
    bool query(int x,int y) {
        if (rad(x)==rad(y)) {
            return true;
        }else {
            return false;
        }
    }
    void join(int x,int y) {
        x=rad(x);
        y=rad(y);
        if (x != y) {
            padre[x]=y;
        }
    }
};

int main() {
    int n,m;
    fin>>n>>m;

    padure disjoint(n);

    for (int i=1;i<=m;i++) {
        int cer;
        fin>>cer;
        if (cer==1) {
            int x,y;
            fin>>x>>y;
            disjoint.join(x,y);
        }else {
            int x,y;
            fin>>x>>y;
            if (disjoint.query(x,y)) {
                fout<<"DA"<<"\n";
            }else {
                fout<<"NU"<<"\n";
            }
        }
    }
    return 0;
}