Cod sursa(job #1210719)

Utilizator mariusn01Marius Nicoli mariusn01 Data 20 iulie 2014 22:12:21
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#define DIM 100010

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

int t[DIM];
int x, y, n, m, i, rx, ry, tip;

int rad (int x) {
    int y = x, r;
    while (t[x] > x)
        x = t[x];
    r = x;
    x = y;
    while (t[x] > 0) {
        y = t[x];
        t[x] = r;
        x = y;
    }
    return r;
}

int main() {
    fin>>n>>m;
    for (i=1;i<=n;i++)
        t[i] = -1;

    for (i=1;i<=m;i++) {
        fin>>tip>>x>>y;
        rx = rad(x);
        ry = rad(y);

        if (tip == 1) {
            if (rx!=ry) {
                if (t[rx] < t[ry]) {
                    t[rx] += t[ry];
                    t[ry] = rx;
                } else {
                    t[ry] += t[rx];
                    t[rx] = ry;
                }
            }
        } else
            fout << ((rx == ry) ? "DA\n" : "NU\n");
    }

    return 0;
}