Pagini recente » Cod sursa (job #1400466) | Cod sursa (job #720483) | Cod sursa (job #1737939) | Cod sursa (job #1259137) | Cod sursa (job #1437984)
#include <cstdio>
using namespace std;
#define Nmax 100002
FILE *f = fopen ( "disjoint.in", "r" );
FILE *g = fopen ( "disjoint.out", "w" );
int tata[Nmax], grad[Nmax];
int Find ( int x ){
int aux, rad;
for ( rad = x; tata[rad] != rad; rad = tata[rad] );
while ( x != tata[x] ){
aux = tata[x];
tata[x] = rad;
x = aux;
}
return rad;
}
void Unite ( int x, int y ){
if ( grad[x] > grad[y] )
tata[y] = x;
else
tata[x] = y;
if ( grad[x] == grad[y] )
grad[y]++;
}
int main(){
int N, Q, x, y, type;
fscanf ( f, "%d%d", &N, &Q );
for ( int i = 1; i <= N; ++i ){
tata[i] = i;
grad[i] = 1;
}
for ( int i = 1; i <= Q; ++i ){
fscanf ( f, "%d%d%d", &type, &x, &y );
int a = Find ( x );
int b = Find ( y );
if ( type == 1 ){
if ( a != b )
Unite ( a, b );
}
else{
if ( a == b )
fprintf ( g, "DA\n" );
else
fprintf ( g, "NU\n" );
}
}
return 0;
}