Cod sursa(job #1011125)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 16 octombrie 2013 11:14:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <cstdio>

const int M = 100001;

struct quest
{
    int t, x, y;
};

quest q[M + 1];
int t[M + 1];
int n, m;

void init ()
{
    int i;

    freopen ("disjoint.in", "r", stdin);
    freopen ("disjoint.out", "w", stdout);

    scanf ("%d %d", &n, &m);
    for (i = 1; i <= m; i ++)
        scanf ("%d %d %d ", &q[i].t, &q[i].x, &q[i].y);
}

int radacina (int x)
{
    if (t[x] == 0)
        return x;

    t[x] = radacina (t[x]);

    return t[x];
}

void solve_afis ()
{
    int i;

    for (i = 1; i <= m; i ++)
        if (q[i].t == 1)
           t[radacina(q[i].x)] = q[i].y;
        else
            if (radacina (q[i].x) == radacina (q[i].y))
                printf ("DA\n");
            else
                printf ("NU\n");

}

int main ()
{
    init ();
    solve_afis ();

    return 0;
}