Cod sursa(job #2222808)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 18 iulie 2018 02:00:22
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>

using namespace std;

const int Nmax = 100005;
int daddy[Nmax];
int N, M;

void init()
{
    for (int i = 1; i <= N; ++i)
        daddy[i] = i;
}

int whosUrDaddy(int k)
{
    if (daddy[k] != k)
        daddy[k] = whosUrDaddy(daddy[k]);
    return daddy[k];
}

void couple(int x, int y)
{
    daddy[whosUrDaddy(x)] = whosUrDaddy(y);
}

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

    scanf("%d%d", &N, &M);
    init();
    for (int i = 1; i <= M; ++i) {
        int t,a,b;
        scanf("%d%d%d",&t, &a, &b);
        if (t == 1) {
            if(whosUrDaddy(a) != whosUrDaddy(b))
                couple(a, b);
            continue;
        }
        printf("%s", whosUrDaddy(a) == whosUrDaddy(b) ? "DA\n" : "NU\n");
    }

    return 0;
}