Cod sursa(job #1395925)

Utilizator alexge50alexX AleX alexge50 Data 21 martie 2015 19:24:21
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <stdio.h>

#define MAX_N 100000


int uf[MAX_N];

char feedback[2][4]={"NU\n","DA\n"};


inline void uf_init(int n);
inline void uf_union(int x,int y);
inline int uf_find(int x);
inline char uf_united(int x,int y);

int main()
{
    FILE *fin=fopen("disjoint.in","r"),
         *fout=fopen("disjoint.out","w");
    int n_numbers,n_op;
    int i;
    int op,x,y;

    fscanf(fin,"%d %d",&n_numbers,&n_op);

    uf_init(n_numbers);

    for(i=0;i<n_op;i++)
    {
        printf("here\n");
        fscanf(fin,"%d %d %d",&op,&x,&y);

        if(op==1)
            uf_union(x,y);
        if(op==2)
            fprintf(fout,"%s",feedback[uf_united(x,y)]);
    }


    fclose(fin);
    fclose(fout);
    return 0;
}


inline char uf_united(int x,int y)
{
    return uf_find(x)==uf_find(y);
}

inline void uf_union(int x,int y)
{
    int i=uf_find(x),j=uf_find(y);

    if(i==j);
    else
    {
        uf[i]=j;
    }
}

inline int uf_find(int x)
{
    int boss;
    boss=x;

    while(boss!=uf[boss])
        boss=uf[boss];

    while(x!=boss)
    {
        int aux=uf[x];
        uf[x]=boss;
        x=aux;
    }
    return boss;
}

inline void uf_init(int n)
{
    int i;
    for(i=1;i<=n;i++)
        uf[i]=i;
}