Cod sursa(job #1012213)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 18 octombrie 2013 14:56:53
Problema Paduri de multimi disjuncte Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
int t[100001];
int radacina(int p){
    if(t[p]==0){
        return p;
    }
    t[p]=radacina(t[p]);
    return t[p];
}
int main(){
    int cod,x,y,w,n,i;
    FILE *fin,*fout;
    fin=fopen("disjoint.in","r");
    fout=fopen("disjoint.out","w");
    fscanf(fin,"%d%d",&w,&n);
    for(i=0;i<n;i++){
        fscanf(fin,"%d%d%d",&cod,&x,&y);
        if(t[x]!=0){
            t[x]=radacina(x);
        }
        if(t[y]!=0){
            t[y]=radacina(y);
        }
        switch(cod){
            case 1 :
                t[radacina(y)]=radacina(x);
                break;
            default :
                if(radacina(x)==radacina(y)){
                    fprintf(fout,"DA\n");
                }else {
                    fprintf(fout,"NU\n");
                }
                break;
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}