Pagini recente » Cod sursa (job #2388919) | Cod sursa (job #2450023) | Cod sursa (job #3164027) | Cod sursa (job #2112510) | Cod sursa (job #526163)
Cod sursa(job #526163)
#include<cstdio>
using namespace std;
int n,m,act,a,b,i,T[100005],R[100005],cauta(int x);
void read(),solve(),uneste(int x, int y);
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
T[i]=i;
R[i]=1;
}
}
void solve()
{
for(;m;m--)
{
scanf("%d%d%d",&act,&a,&b);
if(act==1) uneste(a,b);
else {cauta(a)==cauta(b)?printf("DA\n"):printf("NU\n");}
}
}
void uneste(int x,int y)
{
x=cauta(x);
y=cauta(y);
if(R[x]>R[y]){T[y]=a;R[x]+=R[y];}
else {T[x]=y;R[y]+=R[x];}
}
int cauta(int x)
{
int aux,t;
for(t=x;t!=T[t];t=T[t]);
for(;x!=T[x];)
{
aux=T[x];T[x]=t;x=aux;
}
return t;
}