Pagini recente » Cod sursa (job #1645520) | Cod sursa (job #2310259) | Cod sursa (job #1140463) | Cod sursa (job #3188809) | Cod sursa (job #1395925)
#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;
}