Pagini recente » Cod sursa (job #433822) | Cod sursa (job #2502218) | Cod sursa (job #714370) | Cod sursa (job #890194) | Cod sursa (job #927477)
Cod sursa(job #927477)
#include<stdio.h>
#define max 100002
int n,m,f[max],r[max];
void Unite(int x,int y)
{
if(r[x]<=r[y])
f[x]=y;
else
f[y]=x;
}
void Op1(int x,int y)
{
int xr,yr;
for(xr=f[x];xr!=f[xr];xr=f[x]);
for(yr=f[y];yr!=f[yr];yr=f[y]);
Unite(xr,yr);
}
int Find(int x)
{
int rad,aux;
for(rad=f[x];rad!=f[rad];rad=f[rad]);
while( x!=f[x])
{
aux=f[x];
f[x]=rad;
x=aux;
}
return rad;
}
void Op2(int x,int y)
{
if( Find(x)==Find(y) )
printf("DA\n");
else
printf("NU\n");
}
void Solve()
{
scanf("%d%d",&n,&m);
int cod,x,y;
for(int i=1;i<=n;i++)
{
f[i]=i;
r[i]=1;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&cod,&x,&y);
switch(cod)
{
case 1:
Op1(x,y);
break;
case 2:
Op2(x,y);
break;
}
}
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
Solve();
return 0;
}