Pagini recente » Cod sursa (job #3003186) | Cod sursa (job #2647845) | Cod sursa (job #1374553) | Cod sursa (job #2950368) | Cod sursa (job #630344)
Cod sursa(job #630344)
#include <stdio.h>
#define NMAX 100020
int tt[NMAX],rg[NMAX];
int n,m;
int find(int x)
{
int tata,tmp;
for(tata=x;tt[tata]!=tata;tata=tt[tata]);
while(tt[x]!=tata)
{
tmp=tt[x];
tt[x]=tata;
x=tmp;
}
return tata;
}
void join(int x,int y)
{
int ttx=find(x),tty=find(y);
if(rg[ttx]<rg[tty])
tt[ttx]=tt[tty];
else if(rg[ttx]>rg[tty])
tt[tty]=tt[ttx];
else
{
tt[ttx]=tt[y];
rg[tty]++;
}
}
int main()
{
FILE *f=fopen("disjoint.in","r"),*g=fopen("disjoint.out","w");
fscanf(f,"%d %d\n",&n,&m);
int i,x,y,codop;
for(i=1;i<=n;i++)
{
tt[i]=i;
rg[i]=0;
}
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d %d\n",&codop,&x,&y);
if(codop==1)
join(x,y);
else
if(find(x)==find(y))
fprintf(g,"DA\n");
else
fprintf(g,"NU\n");
}
return 0;
}