Cod sursa(job #1615740)

Utilizator JibrilCernea Bernard Silvestru Jibril Data 26 februarie 2016 20:07:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <cstdio>
#include <algorithm>

using namespace std;
int a[100001], h[100001], aux;
int find(int x) {
    aux=x;
    if(a[x]!=x)
        aux=find(a[x]);
    a[x]=aux;
    return aux;
}
void Union(int x, int y) {
    int c=find(x), b=find(y);
    if(h[c]<h[b])
        a[c]=b;
    else{
        a[b]=c;
        if(h[b]==h[c]) h[c]++;
    }
}
int main() {
    int n, m, cod, x, y, i;
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(i=0; i<n; i++) a[i]=i;
    while(m--) {
        scanf("%d%d%d", &cod, &x, &y);
        if(cod==1)
            Union(x,y);
        else if(find(x)==find(y)) printf("DA\n");
        else printf("NU\n");
    }
    return 0;
}