Cod sursa(job #2269539)

Utilizator hristacheruxiRuxandra Hristache hristacheruxi Data 26 octombrie 2018 10:05:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <stdio.h>
#define N 100001
int T[N];

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

void join(int x, int y)
{
    int t1 = sef(x);
    int t2 = sef(y);
    T[t2] = t1;
}

int query(int x, int y)
{
    int t1 = sef(x);
    int t2 = sef(y);
    if (t1 == t2)
        return 1;
    return 0;
}

int main()
{
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    int n, m, i, q, a, b;

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

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

    for (i = 1; i <= m; i++)
    {
        scanf("%d%d%d", &q, &a, &b);
        if (q == 1)
            join(a, b);
        else if (query(a, b) == 1)
            printf("DA\n");
        else
            printf("NU\n");
    }

    return 0;
}