Cod sursa(job #1414700)

Utilizator Theodor1000Cristea Theodor Stefan Theodor1000 Data 2 aprilie 2015 21:53:27
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <cstdio>

using namespace std;

int t[100010];

inline int find (int x)
{
    int r = x;
    for (; r != t[r]; r = t[r]);

    while (t[x] != x)
    {
        int cx = t[x];
        t[x] = r;
        x = cx;
    }

    return r;
}

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

    int n, m;
    scanf ("%d %d", &n, &m);

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

    for (int i = 1; i <= m; ++i)
    {
        int x, y, o;
        scanf ("%d %d %d", &o, &x, &y);

        if (o == 1) t[x] = y;
        else if (find (x) == find (y)) printf ("DA\n");
        else printf ("NU\n");
    }

    return 0;
}