Cod sursa(job #1857351)

Utilizator roxannemafteiuMafteiu-Scai Roxana roxannemafteiu Data 26 ianuarie 2017 08:39:58
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N_MAX = 100005;

vector <int> multimi[N_MAX];
int rang[N_MAX];

void Union(vector<int> &a, vector<int> &b) {
    vector <int> *x,*y;
    if (a.size() >= b.size()) {
        x = &a;
        y = &b;

    } else {
        x = &b;
        y = &a;
    }

    int ind = rang[(*x)[0]];
    for (const auto &t : *y) {
        (*x).push_back(t);
        rang[t] = ind;
    }
}

int main()
{
    int n, m;
    fin >> n >> m;
    for (int i = 1; i <= n; ++i) {
        multimi[i].emplace_back(i);
        rang[i] = i;
    }

    while (m--) {
        int type, x, y;
        fin >> type >> x >> y;
        if (type == 1) {
            Union(multimi[x], multimi[y]);

        } else {
            fout << ((rang[x] == rang[y]) ? "DA" : "NU") << "\n";
        }
    }
    return 0;
}