Pagini recente » Cod sursa (job #1183009) | Cod sursa (job #2445361) | Cod sursa (job #48008) | Cod sursa (job #33967) | Cod sursa (job #1757327)
#include <cstdio>
using namespace std;
#define NMAX 100005
int v[ NMAX ],
a[ NMAX ];
int n;
int radacina( int x );
bool query( int x, int y );
void reuniune( int x, int y );
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
int m, i, j, x, y, c, k;
scanf("%d%d",&n,&m);
for( i = 1; i <= n; ++i ) v[ i ] = i;
while( m-- ){
scanf("%d%d%d",&c,&x,&y);
if( c == 1 ) reuniune( x, y );
else
if( query( x, y ) ) printf("DA\n");
else printf("NU\n");
}
return 0;
}
int radacina( int x ){
if( x == v[ x ] ) return x;
return radacina( v[ x ] );
}
void reuniune( int x, int y ){
int rx, ry;
rx = radacina( x );
ry = radacina( y );
if( a[ rx ] > a[ ry ] ) v[ ry ] = rx, a[ rx ]++;
else v[ rx ] = ry, a[ ry ]++;
}
bool query( int x, int y ){
int rx, ry, aux;
rx = radacina( x );
ry = radacina( y );
while( x != rx ){
aux = x;
x = v[ x ];
v[ aux ] = rx;
}
return rx == ry;
}