Cod sursa(job #273173)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 8 martie 2009 11:52:51
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 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");

                for (k = x; tata[k] != i; k = w){
                    w = tata[k];
                    tata[k] = i;
                }
                
                for (k = y; tata[k] != i; k = w){
                    w = tata[k];
                    tata[k] = i; 
                }
            }    
                
            else{

                for (k = x; tata[k] != i; k = w){
                    w = tata[k];
                    tata[k] = i;
                }

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

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