Cod sursa(job #1398089)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 23 martie 2015 22:59:09
Problema Paduri de multimi disjuncte Scor 70
Compilator c Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>
int v[100001];
int find(int a){
    int x,max;
    x=a;
    while(a!=v[a])
        a=v[a];
    max=a;
    a=x;
    while(a!=v[a]){
        x=v[a];
        a=max;
        a=x;
    }
return max;
}
void unific(int a,int b){
    if(a>b)
        v[b]=a;
    else
        v[a]=b;
    find(a);
    find(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==1)
            unific(find(x),find(y));
        else{
            x=find(x);
            y=find(y);
            if(x==y)
                fprintf(fout,"DA\n");
            else
                fprintf(fout,"NU\n");
        }
    }
    fclose(fin);
    fclose(fout);
return 0;
}