Cod sursa(job #2945747)

Utilizator FnZbZVrinceanu Radu FnZbZ Data 24 noiembrie 2022 02:21:06
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#define ADD_TO_SET 1
#define SHOW_IF_YES 2
#include <bits/stdc++.h>
using namespace std;

ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");

unsigned int n, m;
vector<unsigned int> dads;

unsigned int getDoD(unsigned int currNode) {
    if (currNode != dads[currNode]) {
        return getDoD(dads[currNode]);
    }
    return currNode;
}

int main() {
    fin >> n >> m;

    dads.resize(n + 1);
    for (unsigned int i = 1; i <= n; i++) {
        dads[i] = i;
    }

    unsigned int operation_type; pair<unsigned int, unsigned int> operands;
    for (unsigned int i = 0; i < m; i++) {
        fin >> operation_type >> operands.first >> operands.second;

        switch (operation_type) {
            case ADD_TO_SET: {
                dads[operands.second] = dads[operands.first];
                break;
            }

            case SHOW_IF_YES: {
                if (getDoD(operands.first) == getDoD(operands.second)) {
                    fout << "DA\n";
                }
                else fout << "NU\n";
                break;
            }

            default: {
                break;
            }
        }
    }

    fin.close(); fout.close();
    return 0;
}