Cod sursa(job #1405951)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 29 martie 2015 16:11:28
Problema Paduri de multimi disjuncte Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
int v[100001];
int find(int x){
    int cop=x,sef;
    while(v[x]!=x)
        x=v[x];
    sef=x;
    x=cop;
    while(v[x]!=x){
        cop=x;
        x=v[x];
        v[x]=sef;
    }
return sef;
}
void unire(int x,int y){
    int a,b;
    a=find(x);
    b=find(y);
    if(a>b)
        v[b]=a;
    else
        v[a]=b;
}
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++)
        v[i]=i;
    for(i=1;i<=m;i++){
        fscanf(fin,"%d%d%d",&cer,&x,&y);
        if(cer==2)
            if(find(x)==find(y))
                fprintf(fout,"DA\n");
            else
                fprintf(fout,"NU\n");
        else
            unire(x,y);
    }
    fclose(fin);
    fclose(fout);
return 0;
}