Cod sursa(job #1527797)

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