Pagini recente » Cod sursa (job #1644498) | Cod sursa (job #1733563) | Cod sursa (job #871166) | Cod sursa (job #1771951) | Cod sursa (job #1070436)
/*
Keep It Simple!
*/
#include<stdio.h>
#include<list>
using namespace std;
int n,m;
int r,x,y;
int Tree[100001],Rang[100001];
void Init()
{
for(int i=1; i<=n; i++)
{
Tree[i] = i;
Rang[i] = 1;
}
}
void AddStack(int a,int b)
{
if(Rang[a] < Rang [b])
Tree[b] = a;
else
Tree[a] = b;
if(Rang[a] == Rang[b]) Rang[b]++;
}
int FindStack(int a)
{
int i,aux;
for(i = a; Tree[i] != i; i=Tree[i]);
while( Tree[a] != a )
{
aux = Tree[a];
Tree[a] = i;
a = aux;
}
return i;
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d %d",&n,&m);
Init();
for(int i=1; i<=m; i++)
{
scanf("%d %d %d",&r,&x,&y);
if ( r == 1 )
AddStack(x,y);
else if ( r == 2 )
if( FindStack(x) == FindStack(y) )
printf("DA\n");
else printf("NU\n");
}
}