Cod sursa(job #2261152)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 15 octombrie 2018 23:46:11
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 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;
}