Cod sursa(job #3362872)

Utilizator horia.boeriuBoeriu Horia Andrei horia.boeriu Data 12 august 2026 20:46:40
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>

using namespace std;
const int MAXN = 100000;
int sef[MAXN + 1], siz[MAXN + 1];

int findsef(int i) {
    if (i == sef[i]) {
        return i;
    }
    return sef[i] = findsef(sef[i]);
}
void unesc(int x, int y) {
    x = findsef(x);
    y = findsef(y);
    if (x != y) {
        if (siz[x] > siz[y]) {
            swap(x, y);
        }
        sef[x] = y;
        siz[y] += siz[x];
    }
}
int main()
{
    FILE *fin, *fout;
    int n, m, i, x, y, cer;
    fin = fopen("disjoint.in", "r");
    fscanf(fin, "%d%d", &n, &m);
    for (i = 1; i <= n; i++) {
        sef[i] = i;
        siz[i] = 1;
    }
    fout = fopen("disjoint.out", "w");
    for (i = 0; i < m; i++) {
        fscanf(fin, "%d%d%d", &cer, &x, &y);
        if (cer == 1) {
            unesc(x, y);
        } else if (findsef(x) == findsef(y)) {
            fprintf(fout, "DA\n");
        } else {
            fprintf(fout, "NU\n");
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}