Cod sursa(job #1668818)

Utilizator RaduMirceaAndreiRadu Mircea Andrei RaduMirceaAndrei Data 30 martie 2016 09:14:28
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>

using namespace std;
int t[200010];
int n, m, i, ra, rb, a, b, tip;

int rad(int a) {
    while (t[a] > 0)
        a = t[a];
    return a;
}

int main () {
    ifstream fin ("disjoint.in");
    ofstream fout("disjoint.out");
    fin>>n>>m;

    for (i=1;i<=n;i++)
        t[i] = -1;

    for (;m--;) {
        fin>>tip>>a>>b;
        ra = rad(a);
        rb = rad(b);
        if (tip == 1) {
            //uneste
            if (ra != rb) {
                if (t[ra] < t[rb]) {
                    t[ra] += t[rb];
                    t[rb] = ra;
                } else {
                    t[rb] += t[ra];
                    t[ra] = rb;
                }
            }
        } else {
            // verifica
            fout<<((ra == rb) ? "DA\n" : "NU\n");
        }
    }
    return 0;
}