Pagini recente » Cod sursa (job #1405942) | Cod sursa (job #1450924) | Cod sursa (job #3290530) | Cod sursa (job #1314500) | Cod sursa (job #2267518)
#include <cstdio>
#define MaxN 100005
using namespace std;
int Head[MaxN], N, M, i, Size[MaxN];
void Join(int a, int b);
void Test(int a, int b);
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d%d", &N, &M);
for(i=1; i<=N; ++i){Head[i]=-1; Size[i]=1;}
for(i=1; i<=M; ++i){
int x, y, z;
scanf("%d%d%d", &x, &y, &z);
if(x==1)Join(y, z);
else Test(y, z);
}
return 0;
}
void Join(int a, int b){
if(Head[a]==-1 && Head[b]==-1){
Head[b]=a;
Size[a]=2;
}
else{
while(Head[a]!=-1)a=Head[a];
while(Head[b]!=-1)b=Head[b];
if(Size[a]<Size[b]){Head[a]=b; Size[b]+=Size[a];}
else {Head[b]=a; Size[a]+=Size[b];}
}
return;
}
void Test(int a, int b){
int List[MaxN], VfList=0, i;
while(Head[a]!=-1){
List[++VfList]=a;
a=Head[a];
}
for(i=1; i<=VfList; ++i)Head[List[i]]=a;
VfList=0;
while(Head[b]!=-1){
List[++VfList]=b;
b=Head[b];
}
for(i=1; i<=VfList; ++i)Head[List[i]]=b;
if(a==b)printf("DA\n");
else printf("NU\n");
}