Pagini recente » Cod sursa (job #2902052) | Cod sursa (job #1178465) | Cod sursa (job #424920) | Registru diplome | Cod sursa (job #263600)
Cod sursa(job #263600)
#include<stdio.h>
const int N=100002;
int t[N],rang[N];
int multime(int x) //merge recursiv pentru a realiza compresia drumului
{
if(t[x]!=x)
t[x]=multime(t[x]);
return t[x];
}
void reuneste(int x, int y)
{
x=multime(x);
y=multime(y);
if(rang[x]<rang[y])
t[x]=y;
else
t[y]=x;
if(rang[x]==rang[y]) ++rang[x]; // daca multimile au rang egal maresc rangul pt mult. noua (x)
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int n,m,i,cod,x,y;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i) t[i]=i;
for(i=0;i<m;++i)
{
scanf("%d%d%d",&cod,&x,&y);
if(cod==1)
reuneste(x,y);
else
if(multime(x)==multime(y)) printf("DA\n");
else printf("NU\n");
}
return 0;
}