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