Cod sursa(job #2804131)

Utilizator Andreea__Zavoiu Andreea Andreea__ Data 20 noiembrie 2021 23:34:22
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m,tata[100002], dim[100002];

int find(int x){
    while (x != tata[x])
        x = tata[x];
    return x;
}

void uneste(int x, int y) {
    int tataX = find(x);
    int tataY = find(y);

    if (dim[tataX] >= dim[tataY]) {
        tata[tataY] = tataX;
        dim[tataX] += dim[tataY];
    } else {
        tata[tataX] = tataY;
        dim[tataY] += dim[tataX];
    }

}

int main() {
    int x,y,cod;
    fin >> n >> m;
    for (int i=0; i<n; i++) {
        tata[i] = i;
        dim[i] = 1;
    }
    for (int i=0; i<m; i++){
        fin >> cod >> x >> y;

        if (cod == 1)
            uneste(x,y);
        else if (find(x) == find(y))
                fout << "DA\n";
        else fout << "NU\n";
    }

    return 0;
}