Cod sursa(job #2923854)

Utilizator Edyci123Bicu Codrut Eduard Edyci123 Data 20 septembrie 2022 01:45:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#define INFILE "disjoint.in"
#define OUTFILE "disjoint.out"
#define DIM 100005

using namespace std;

ifstream f(INFILE);
ofstream g(OUTFILE);

int n, m, t[DIM];

void init() {
    for (int i = 1; i <= n; i++) {
        t[i] = i;
    }
}

void leaga(int x, int y) {
    t[x] = t[y];
}

int radacina(int x) {
    if (t[x] == x)
        return x;
    return t[x] = radacina(t[x]);
}

int main() {

    f >> n >> m;

    init();
    for (int i = 1; i <= m; i++) {
        int ops, x, y;
        f >> ops >> x >> y;

        if (ops == 1) {
            int radx = radacina(x);
            int rady = radacina(y);

            if (radx != rady) {
                leaga(radx, rady);
            }
        }
        if (ops == 2) {
            int radx = radacina(x);
            int rady = radacina(y);

            if (radx == rady) {
                g << "DA\n";
            } else {
                g << "NU\n";
            }
        }
    }

    return 0;
}