Cod sursa(job #2512548)

Utilizator Vaida_Radu_AndreiVaida Radu Andrei Vaida_Radu_Andrei Data 21 decembrie 2019 11:36:47
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#define maxPcts 101024

using namespace std;

int pcts;
int parents[maxPcts];
int weights[maxPcts];

void initialSet() {
    int i;
    for(i=0;i<maxPcts;++i) {
        weights[i]=1;
        parents[i]=-1;
    }
}

int goToDaddy(int pos) {
    if(parents[pos]<0) {
        return pos;
    }
    else {
        parents[pos]=goToDaddy(parents[pos]);
        return parents[pos];
    };
}

void oonion() {
    int x,y;
    scanf("%d%d",&x,&y);
    goToDaddy(x);
    x=parents[x];
    goToDaddy(y);
    y=parents[y];
    if(weights[x]>weights[y]) {
        parents[y]=x;
        weights[x]+=weights[y];
    }
    else {
        parents[x]=y;
        weights[y]+=weights[x];
    }
}

void find() {
    int x,y;
    scanf("%d%d",&x,&y);
    goToDaddy(x);
    goToDaddy(y);
    if(parents[x]==parents[y]&&parents[x]>=0) {
        printf("DA\n");
    }
    else {
        printf("NU\n");
    }
}

void solve() {
    int q,iq,task;
    scanf("%d%d",&pcts,&q);
    for(iq=0;iq<q;++iq) {
        scanf("%d",&task);
        if(task-1) {
            find();
        }
        else {
            oonion();
        }
    }
}

int main() {
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    initialSet();
    solve();
    return 0;
}