Cod sursa(job #1654231)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 16 martie 2016 21:49:08
Problema Paduri de multimi disjuncte Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.72 kb
#include <stdio.h>
#define lim 100005
int sef[lim];
int boss(int x){
    if(sef[x]==x)
        return x;
    sef[x]=boss(sef[x]);
    return sef[x];
}
void unire(int x,int y){
    sef[boss(x)]=boss(y);
}
int main(){
    FILE *fin,*fout;
    fin=fopen("disjoint.in","r");
    fout=fopen("disjoint.out","w");
    int i,n,m,x,y,cer;
    fscanf(fin,"%d%d",&n,&m);
    for(i=1;i<=n;i++)
        sef[i]=i;
    for(i=1;i<=m;i++){
        fscanf(fin,"%d%d%d",&cer,&x,&y);
        if(cer==1)
            unire(x,y);
        else
            if(boss(x)==boss(y))
                fprintf(fout,"DA\n");
            else
                fprintf(fout,"NU\n");
    }
    fclose(fin);
    fclose(fout);
    return 0;
}