Pagini recente » Cod sursa (job #911721) | Cod sursa (job #1607268) | Cod sursa (job #933555) | Cod sursa (job #131676) | Cod sursa (job #1768601)
#include <cstdio>
using namespace std;
int rad[100010],v[100010];
int radacina(int x,int c)
{
int y=x;
while(rad[y]!=y) y=rad[y];
while(x!=y)
{
v[x]=c;
int aux=rad[x];
rad[x]=y;
x=aux;
}
return y;
}
void reuneste(int x,int y)
{
int a=radacina(y,v[x]+v[y]),b=radacina(x,v[x]+v[y]);
rad[b]=a;
}
int query(int x,int y)
{
if(radacina(x,v[x]+v[y])==radacina(y,v[x]+v[y])) return 1;
else return 0;
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int n,m,x,y,cod;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
rad[i]=i;
v[i]=1;
}
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&cod,&x,&y);
if(cod==1)
if(v[x]<v[y]) reuneste(x,y);
else reuneste(y,x);
if(cod==2)
if(query(x,y)==1) printf("DA\n");
else printf("NU\n");
}
return 0;
}