Pagini recente » Cod sursa (job #1124339) | Cod sursa (job #924998) | Cod sursa (job #684322) | Borderou de evaluare (job #520085) | Cod sursa (job #250294)
Cod sursa(job #250294)
#include <stdio.h>
#define egal(a,b)(a==b?"DA":"NU")
long m[1<<17],i,j,n,mut,op,nvi[1<<17],x,y;
void unire(long x,long y)
{
if (nvi[x]>nvi[y]){
m[y]=x;
}
else{
m[x]=y;
if(nvi[x]==nvi[y]);
nvi[y]++;
}
}
int cauta(int x)
{
if (m[x]==x)
return x;
return (m[x]=cauta(m[x]));
}
int main()
{
freopen ("disjoint.in","r",stdin);
freopen ("disjoint.out","w",stdout);
scanf("%ld %ld",&n,&mut);
for(i=1;i<=n;++i)m[i]=i;
for (;mut;--mut){
scanf("%ld %ld %ld",&op,&x,&y);
if(op==1)unire(m[x],m[y]);
else{
x=cauta(x);y=cauta(y);
if(x==y)printf("DA\n");
else printf("NU\n");
}
}
return 0;
}