Cod sursa(job #1243726)

Utilizator diana97Diana Ghinea diana97 Data 16 octombrie 2014 11:58:50
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f ("disjoint.in");
ofstream g ("disjoint.out");

const int NMAX = 100000 + 1;
int n, q;
int h[NMAX], t[NMAX];

void uneste(int x, int y) {
    if (h[x] < h[y]) t[x] = y;
    else t[y] = x;
    if (h[x] == t[y]) h[x]++;
}

int radacina(int x) {
    while (t[x] != x) x = t[x];
    return x;
}

void rezolva() {
    int tip, x, y, rx, ry;
    while(q--) {
        f >> tip >> x >> y;
        rx = radacina(x);
        ry = radacina(y);
        if (tip == 1) uneste(rx, ry);
        else {
            if (rx == ry) g << "DA\n";
            else g << "NU\n";
        }
    }
}

void initializeaza() {
    for (int i = 1; i <= n; i++) {
        t[i] = i;
        h[i] = 1;
    }
}

int main() {
    f >> n >> q;
    initializeaza();
    rezolva();
    return 0;
}