Pagini recente » Cod sursa (job #221772) | Cod sursa (job #1257428) | Cod sursa (job #2807115) | Cod sursa (job #1550265) | Cod sursa (job #1233893)
#include <cstdio>
using namespace std;
const int LIM=100005;
int n,p,tata[LIM],rang[LIM];
int find_tata(int k)
{
if(k==tata[k])
return k;
int t=find_tata(tata[k]);
tata[k]=t;
return t;
}
void reuniune(int a,int b)
{
int ta=find_tata(a),tb=find_tata(b);
if(rang[ta]<rang[tb])
rang[tb]+=rang[ta],tata[ta]=tb;
else
rang[ta]+=rang[tb],tata[tb]=ta;
}
bool same_set(int a,int b)
{
return find_tata(a)==find_tata(b);
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int i,op,a,b;
scanf("%d%d",&n,&p);
for(i=1;i<=n;++i)
tata[i]=i,rang[i]=1;
for(;p;--p)
{
scanf("%d%d%d",&op,&a,&b);
if(op==1)
reuniune(a,b);
else
if(same_set(a,b))
printf("DA\n");
else
printf("NU\n");
}
return 0;
}