Cod sursa(job #2867643)

Utilizator gripzStroescu Matei Alexandru gripz Data 10 martie 2022 14:37:11
Problema Paduri de multimi disjuncte Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <vector>

#define NMAX 103

using namespace std;

int N, M;
int c[NMAX];

int Find(int x) {
    int y = x, t;
    while(c[y] != y) {
        y = c[y];
    }

    while(y != x) {
        t = c[x];
        c[x] = y;
        x = t;
    }

    return x;
}

void Unite(int x, int y) {
    int a = Find(y);
    int b = Find(x);
    c[a] = b;
}

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

    scanf("%d %d", &N, &M);

    for(int i = 1; i <= N; i++) {
        c[i] = i;
    }

    for(int j = 1; j <= M; j++) {
        int cod, x, y;
        scanf("%d %d %d", &cod, &x, &y);
        if(cod == 1) {
            Unite(x, y);
        } else {
            if(Find(x) == Find(y)) {
                printf("DA\n");
            }
            else printf("NU\n");
        }
    }

    return 0;
}