Cod sursa(job #2285344)

Utilizator Alexghita96Ghita Alexandru Alexghita96 Data 18 noiembrie 2018 14:40:03
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <cstdio>
#include <vector>

using namespace std;

vector<int> parent;

void read(int &n, int &m, vector<pair<int, pair<int, int> > > &queries) {
    scanf("%d %d", &n, &m);

    for (int i = 0; i < n; i++) {
        parent.push_back(i);
    }

    int query_type, x, y;
    for (int i = 0; i < m; i++) {
        scanf("%d %d %d", &query_type, &x, &y);
        queries.push_back(make_pair(query_type, make_pair(x - 1, y - 1)));
    }
}

int find_parent(int node) {
    if (parent[node] != node) {
        parent[node] = find_parent(parent[node]);
    }
    return parent[node];
}

void solve(vector<pair<int, pair<int, int> > > queries) {
    for (vector<pair<int, pair<int, int> > >::iterator it = queries.begin(); it != queries.end(); it++) {
        if (it->first == 1) {
            parent[find_parent(it->second.first)] = find_parent(it->second.second);
        } else if (find_parent(it->second.first) == find_parent(it->second.second)) {
            printf("DA\n");
        } else {
            printf("NU\n");
        }
    }
}

int main() {
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);

    int n, m;
    vector<pair<int, pair<int, int> > > queries;

    read(n, m, queries);
    solve(queries);
}