Cod sursa(job #1418223)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 12 aprilie 2015 13:36:20
Problema Paduri de multimi disjuncte Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100001
int v[MAXN];
inline int find(int x){
    int x1=x,aux;
    while(v[x]>0)
        x=v[x];
    while(v[x1]>0){
        aux=v[x1];
        v[x1]=x;
        x1=aux;
    }
    return x;
}
int main(){
    FILE*fi,*fout;
    int i,t,x,y,n,m;
    fi=fopen("disjoint.in" ,"r");
    fout=fopen("disjoint.out" ,"w");
    fscanf(fi,"%d%d" ,&n,&m);
    for(i=0;i<m;i++){
        fscanf(fi,"%d%d%d" ,&t,&x,&y);
        if(t==1){
            v[y]=find(x);
            find(y);
        }
        else
            if(find(x)==find(y))
                fprintf(fout,"DA\n");
            else
                fprintf(fout,"NU\n");
    }
    for(i=1;i<=n;i++)
        printf("%d " ,v[i]);
    fclose(fi);
    fclose(fout);
    return 0;
}