Cod sursa(job #1790433)

Utilizator tiberiu.bucur17Tiberiu Constantin Emanoil Bucur tiberiu.bucur17 Data 28 octombrie 2016 11:21:18
Problema Paduri de multimi disjuncte Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#define MAXN 100001
int next[MAXN],lung[MAXN];
int find(int x)
{
    if(!next[x])
        return x;
    return next[x]=find(next[x]);
}
inline void unite(int x,int y)
{
    if(lung[x]<lung[y])
        next[x]=y;
    else
    {
        if(lung[x]==lung[y])
            lung[x]++;
        next[y]=x;
    }
}
int main()
{
    FILE *fin,*fout;
    fin=fopen("disjoint.in","r");
    fout=fopen("disjoint.out","w");
    int m,i,cod,x,y;
    fscanf(fin,"%d%d",&m,&m);
    for(i=0;i<m;i++)
    {
        fscanf(fin,"%d%d%d",&cod,&x,&y);
        if(cod==1)
            unite(find(x),find(y));
        else
        {
            if(find(x)==find(y))
                fprintf(fout,"DA\n");
            else
                fprintf(fout,"NU\n");
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}