Pagini recente » Cod sursa (job #2089186) | Cod sursa (job #300261) | Cod sursa (job #3131417) | Cod sursa (job #2665282) | Cod sursa (job #234255)
Cod sursa(job #234255)
#include<stdio.h>
#define N 100010
int n,m,rg[N],t[N];
char da[]={'D','A','\n','\0'};
char nu[]={'N','U','\n','\0'};
int find(int x)
{
int r,aux;
for(r=x; t[r]!=r; r=t[r])
;
while(t[x]!=x)
{
aux=t[x];
t[x]=r;
x=aux;
}
return r;
}
void unire(int x,int y)
{
if(rg[x]<rg[y])
t[x]=y;
else
t[y]=x;
if(rg[x]==rg[y])
++rg[x];
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d\n",&n,&m);
for(int i=1; i<=n; i++)
{
t[i]=i;
rg[i]=1;
}
char cod;
int x,y;
for(; m; m--)
{
cod=fgetc(stdin);
scanf("%d%d\n",&x,&y);
if(cod=='1')
unire(find(x),find(y));
else
{
if(find(x)==find(y))
fputs(da,stdout);
else
fputs(nu,stdout);
}
}
return 0;
}