Cod sursa(job #2376970)

Utilizator hristacheruxiRuxandra Hristache hristacheruxi Data 8 martie 2019 20:25:31
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
#define N 100001
int dad[N];

int find_daddy(int x)
{
    if (x != dad[x])
        x = find_daddy(dad[x]);
    return x;
}

void join(int a, int b)
{
    a = find_daddy(a);
    b = find_daddy(b);
    dad[b] = a;
}

char query(int a, int b)
{
    a = find_daddy(a);
    b = find_daddy(b);
    if (dad[a] == dad[b])
        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++)
        dad[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;
}