Cod sursa(job #1660722)

Utilizator AttyyKucsvan Attila Attyy Data 23 martie 2016 13:04:56
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>

int szulo(int x, int *apa);
void egyesites(int x, int y, int *apa, int *rang);

int main(){
    int i, n, m, op, x, y, apa[100000], rang[100000];
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(i = 0; i < n; ++i){
        apa[i] = rang[i] = i;
    }
    while(m--){
        scanf("%d%d%d", &op, &x, &y);
        x -= 1;
        y -= 1;
        if(op == 1){
            egyesites(x, y, apa, rang);
        }
        else{
            printf(szulo(x, apa) == szulo(y, apa) ? "Da\n" : "NU\n");
        }
    }
    return 0;
}

void egyesites(int x, int y, int *apa, int *rang){
    int apax = szulo(x, apa), apay = szulo(y, apa);
    if(rang[apax] > rang[apay]){
        apa[apay] = apax;
    }
    else{
        apa[apax] = apay;
    }
    if(rang[apax] == rang[apay]){
        ++rang[apay];
    }
}

int szulo(int x, int *apa){
    if(x == apa[x]){
        return x;
    }
    return apa[x] = szulo(apa[x], apa);
}