Cod sursa(job #1392548)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 18 martie 2015 18:41:47
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
# include <cstdio>
# define MAX 100005

using namespace std;

int t[MAX];
int n, m, OP, x, y;

int find (int x)
{
    if(t[x] == x) return x;
    int y = find(t[x]);
    t[x] = y;
    return y;
}

void reuniune (int x, int y)
{
    x = find(x);
    y = find(y);
    t[x] = y;
    /*
    if (rang[x] > rang[y]) t[y] = x;
    else if (rang[x] < rang[y]) t[x] = y;
    else
    {
        rang[x]++;
        t[y] = x;
    } */
}

int main ()

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

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

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

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

        if (OP == 1) reuniune(x,y);
        if (OP == 2)
        {
            if (find(x) == find(y)) printf("DA\n");
            else printf ("NU\n");
        }

    }

    return 0;
}