Cod sursa(job #2261154)

Utilizator BogdanRazvanBogdan Razvan BogdanRazvan Data 15 octombrie 2018 23:47:18
Problema Paduri de multimi disjuncte Scor 100
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;
}