Cod sursa(job #1644352)

Utilizator Vali_DeaconuVali Deaconu Vali_Deaconu Data 9 martie 2016 22:39:47
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
# include <fstream>
# include <vector>

using namespace std;

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

const int MAX = 100005;
vector<int> t(MAX), r(MAX);
int n, m;

void connect(int x, int y) {
    if (r[x] > r[y])
        t[y] = x;
    else t[x] = y;

    if (r[x] == r[y])
        ++r[y];
}

bool sameForest(int x, int y) {
    int r;
    for (r = x; r; r = t[r])
        if (r == y)
            return 1;

    for (r = y; r; r = t[r])
        if (r == x)
            return 1;

    return 0;
}

int main() {
    int tmp, x, y, i;
    fin >> n >> m;

    for (i=1; i<=n; ++i)
        t[i] = 0, r[i] = 1;

    for (i=1; i<=m; ++i) {
        fin >> tmp >> x >> y;
        if (tmp == 1)
            connect(x, y);
        else {
            if (sameForest(x, y))
                fout << "DA\n";
            else
                fout << "NU\n";
        }
    }
    return 0;
}