Cod sursa(job #1398074)

Utilizator AnaRaduAna-Maria Radu AnaRadu Data 23 martie 2015 22:44:40
Problema Paduri de multimi disjuncte Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
int v[100001];
int main(){
    FILE *fin,*fout;
    fin=fopen("disjoint.in","r");
    fout=fopen("disjoint.out","w");
    int i,n,m,a,b,x,y,cop,max,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);
        a=x;
        b=y;
        while(a!=v[a])
            a=v[a];
        while(b!=v[b])
            b=v[b];
        if(cer==2)
            if(a==b)
                fprintf(fout,"DA\n");
            else
                fprintf(fout,"NU\n");
        else{
            max=0;
            if(a>max)
                max=a;
            if(b>max)
                max=b;
        }
        a=x;
        b=y;
        while(v[a]!=max){
            cop=v[a];
            v[a]=max;
            a=cop;
        }
        v[a]=max;
        while(v[b]!=max){
            cop=v[b];
            v[b]=max;
            b=cop;
        }
        v[b]=max;
    }
    fclose(fin);
    fclose(fout);
return 0;
}