Pagini recente » Cod sursa (job #2682700) | Cod sursa (job #1597858) | Cod sursa (job #1843376) | Cod sursa (job #2137845) | Cod sursa (job #360172)
Cod sursa(job #360172)
#include <stdio.h>
#define N 1<<17
int n,m,tip,x,y;
int parinte[N],grd[N];
void init()
{
int i;
for (i=1; i<=n; i++)
{
parinte[i]=i;
grd[i]=1;
}
}
int rad(int x)
{
int i,nod=x,y;
while (parinte[nod]!=nod)
nod=parinte[nod];
while (parinte[x]!=x)
{
y=parinte[x];
parinte[x]=nod;
x=y;
}
return nod;
}
void uneste(int x,int y)
{
if (grd[x]<grd[y])
parinte[x]=y;
else
parinte[y]=x;
if (grd[x]==grd[y])
grd[x]++;
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&n,&m);
int i;
init();
for (i=1; i<=m; i++)
{
scanf("%d%d%d",&tip,&x,&y);
tip--;
if (tip)
if (rad(x)==rad(y))
printf("DA\n");
else
printf("NU\n");
else
uneste(rad(x),rad(y));
}
return 0;
}