Cod sursa(job #2364004)

Utilizator ioana.jianuIoana Jianu ioana.jianu Data 3 martie 2019 19:54:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <stdio.h>

using namespace std;

const int NMAX = 100001;
int sef[NMAX];

int sefsuprem(int x) {
    if (sef[x] == x)
        return x;
    else
        return sef[x] = sefsuprem(sef[x]);
}

void unire(int x, int y) {
    int sefsx = sefsuprem(x);
    int sefsy = sefsuprem(y);
    sef[sefsx] = sefsy;
}


int main() {

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

    int n, m, x, y, cod, i;

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

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

    for (i = 1; i <= m; i++) {
        scanf ("%d%d%d", &cod, &x, &y);
        if (cod == 1)
            unire (x, y);
        else {
            if (sefsuprem(x) == sefsuprem(y))
                printf ("DA\n");
            else
                printf ("NU\n");
        }
    }


    return 0;
}