Cod sursa(job #842366)

Utilizator mihai995mihai995 mihai995 Data 26 decembrie 2012 18:53:12
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
using namespace std;

const int N = 100005;
const char ans[2][10] = {"NU\n", "DA\n"};

struct Pmd{
    int T[N];

    void init(int size){
        for (int i = 1 ; i <= size ; i++)
            T[i] = i;
    }

    int tata(int x){
        if (x == T[x])
            return x;
        return T[x] = tata(T[x]);
    }

    void merge(int x, int y){
        x = tata(x);
        y = tata(y);

        if (x == y)
            return;

        if (x < y)
            T[y] = x;
        else
            T[x] = y;
    }
};

Pmd P;

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

int main(){
    int n, m, t, x, y;

    in >> n >> m;

    P.init(n);

    while (m--){
        in >> t >> x >> y;

        x = P.tata(x);
        y = P.tata(y);

        if (t == 1)
            P.merge(x, y);
        else
            out << ans[x == y];
    }

    return 0;
}