Cod sursa(job #2369464)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 5 martie 2019 23:40:43
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

int v[100005], Next[100005], Size[100005];

void init(int n) {

    for(int i = 1; i <= n; i++) {

        v[i] = i;

        Size[i] = 1;

        Next[i] = i;

    }

}

int Find(int x) {

    return v[x];

}

void unit(int x, int y) {

    int fx = Find(x);

    if(fx != Find(y)) {

        Size[x] += Size[y];

        int i = y;

        do {

            v[i] = fx;

            i = Next[i];

        }

        while(i != y);

        int nx = Next[x];

        Next[x] = Next[y];

        Next[y] = nx;

    }

}

void Check(int x, int y) {

    if(Find(x) == Find(y)) printf("DA\n");

    else printf("NU\n");

}

int N, K, i, cod, x, y;

int main() {

    freopen("disjoint.in", "r", stdin);

    freopen("disjoint.out", "w", stdout);

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

    init(N);

    for(i = 1; i <= K; i++) {

        scanf("%d%d%d", &cod, &x, &y);

        if(cod == 1) unit(x, y);

        else Check(x, y);

    }

    return 0;

}