Cod sursa(job #2424810)

Utilizator IulianaRusuIuliana Rusu IulianaRusu Data 23 mai 2019 21:27:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
using namespace std;
int tata[500001];
int grad[500001];
int N, M, x, y, operatie;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int FindT(int nod) {
    if (tata[nod] == nod) return nod;
    tata[nod] = FindT(tata[nod]);
    return tata[nod];
}

int main() {
    fin >> N>>M;
    for (int i = 1; i <= N; i++) {
        tata[i] = i;
        grad[i] = 1;
    }
    for (int i = 0; i < M; i++) {
        fin >> operatie >> x >> y;
        int fx, fy;
        fx = FindT(x);
        fy = FindT(y);
        if (operatie == 1) {
            if (grad[fx] < grad[fy]) {
                tata[fx] = fy;
                grad[fy] += grad[fx];
            } else {
                tata[fy] = fx;
                grad[fx] += grad[fy];
            }
        } else if (operatie == 2) {
            if (fx == fy)
                fout << "DA" << '\n';
            else fout << "NU" << '\n';
        }
    }
    return 0;
}