Pagini recente » Cod sursa (job #4385) | Cod sursa (job #2779518) | Cod sursa (job #1832499) | Cod sursa (job #509264) | Cod sursa (job #1716135)
#include <iostream>
#include <cstdio>
using namespace std;
int N,M;
struct nod
{
nod *parent = this;
int value;
int rang = 0;
}*a[100005];
nod* find(nod *x)
{
if(x->parent != x)
x->parent = find(x->parent);
return x->parent;
}
void reunion(nod *&a, nod *&b)
{
nod *pa = find(a);
nod *pb = find(b);
if(pa->rang > pb->rang)
pb->parent = pa;
else if(pb->rang < pb->rang)
pa->parent = pb;
else
{
pb->parent = pa;
pa->rang++;
}
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++)
{
a[i] = new nod;
a[i] -> value = i;
}
for(int i=1;i<=M;i++)
{
int t,x,y;
scanf("%d%d%d",&t,&x,&y);
if(t==1)
{
reunion(a[x],a[y]);
}
else
{
if(find(a[x])==find(a[y]))
printf("DA");
else
printf("NU");
printf("\n");
}
}
return 0;
}