Cod sursa(job #273185)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 8 martie 2009 12:03:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.42 kb
#include<stdio.h>
#define N 100002

int n, m, x, y, c, tata[N], i, j, k, w;

void citire();

int main(){
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    citire();

    return 0;
}

void citire(){
    scanf("%d %d", &n, &m);
    for (; m; m--){
        scanf("%d %d %d", &c, &x, &y);
        if (c == 1){
            for (i = x; tata[i] != 0; i = tata[i]);
            for (j = y; tata[j] != 0; j = tata[j]);
            tata[i] = j;
        }
        else{
            for (i = x; tata[i] != 0; i = tata[i]);
            for (j = y; tata[j] != 0; j = tata[j]);

            if (i == j){

                printf("DA\n");
                if (tata[x] > 0)
                for (k = x; tata[k] != i; k = w){
                    w = tata[k]; tata[k] = i;
                }
                
                if (tata[y] > 0) 
                for (k = y; tata[k] != i; k = w){
                    w = tata[k]; tata[k] = i; 
                }
            }    
                
            else{
                 if (tata[x] > 0)
                for (k = x; tata[k] != i; k = w){
                    w = tata[k]; tata[k] = i;
                }

                if ( tata[y] > 0 )
                for (k = y; tata[k] != j; k = w){
                    w = tata[k]; tata[k] = j;
                }

                    printf("NU\n");
                }
        }
    }
}