Cod sursa(job #3310731)

Utilizator ultra980Alex Stan ultra980 Data 16 septembrie 2025 11:42:28
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

const int MNMAX = 100000;

struct DSU {
    int n;
    int head[MNMAX];
    
    DSU(int n) {
        int i;
        
        this->n = n;
        for (i = 0; i < n; ++i) {
            head[i] = i;
        }
    }
    
    int find(int i) {
        if (head[i] == i)
            return i;
        return head[i] = find(head[i]);
    }
    
    void unite(int dom, int sub) {
        head[find(sub)] = find(dom);
    }
} *d;

using namespace std;

int main() {
    ifstream fin;
    ofstream fout;
    int n, m, i, op, x, y;
    
    fin.open("disjoint.in");
    fin >> n >> m;
    d = new DSU(n);
    fout.open("disjoint.out");
    for (i = 0; i < m; ++i) {
        fin >> op >> x >> y;
        --x;
        --y;
        switch (op) {
            case 1:
                d->unite(x, y);
                break;
            case 2:
                fout << (d->find(x) == d->find(y) ? "DA\n" : "NU\n");
        }
    }
    fin.close();
    fout.close();
    
    return 0;
}