Pagini recente » Cod sursa (job #3279668) | Cod sursa (job #761407) | Cod sursa (job #318594) | Borderou de evaluare (job #547029) | Cod sursa (job #566962)
Cod sursa(job #566962)
#include <cstdio>
#define MaxN 100005
#define infile "disjoint.in"
#define outfile "disjoint.out"
int t[MaxN],r[MaxN];
int N,M;
int op,x,y,r1,r2;
int radacina(int nod)
{
if(!t[nod])
return nod;
return radacina(t[nod]);
}
void parcurge(int nod,int R)
{
if(t[nod])
{
parcurge(t[nod],R);
t[nod]=R;
}
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
scanf("%d%d",&N,&M);
for(;M;M--)
{
scanf("%d%d%d",&op,&x,&y);
if(op==1)
{
r1=radacina(x);
r2=radacina(y);
if(r1>=r2)
{
t[r2]=r1;
if(r[r2]+1>r[r1])
r[r1]=r[r2]+1;
}
else
{
t[r1]=r2;
if(r[r1]+1>r[r2])
r[r2]=r[r1]+1;
}
}
else
{
r1=radacina(x);
r2=radacina(y);
if(r1==r2)
printf("DA\n");
else
printf("NU\n");
parcurge(x,r1);
parcurge(y,r2);
}
}
fclose(stdin);
fclose(stdout);
return 0;
}