Pagini recente » Cod sursa (job #1245374) | Cod sursa (job #3288766) | Cod sursa (job #3241491) | Ecuatie | Cod sursa (job #2201424)
#include <cstdio>
#define NMAX 100000
int tata[NMAX], rang[NMAX];
int comp( int nod ) {
int R = nod, aux;
while ( R != tata[R] )
R = tata[R];
while ( nod != R ) {
aux = tata[nod];
tata[nod] = R;
nod = aux;
}
return R;
}
void uneste( int x, int y ) {
int dad1 = comp( x ), dad2 = comp( y );
if ( rang[dad1] > rang[dad2] )
tata[dad2] = dad1;
else
tata[dad1] = dad2;
if ( rang[dad1] == rang[dad2] )
rang[dad2]++;
}
int main() {
FILE *fin, *fout;
fin = fopen( "disjoint.in", "r" );
fout = fopen( "disjoint.out", "w" );
int n, m, i, cerinta, x, y;
fscanf( fin, "%d%d", &n, &m );
for ( i = 0; i < n; i++ ) {
tata[i] = i;
rang[i] = 1;
}
while ( m-- ) {
fscanf( fin, "%d%d%d", &cerinta, &x, &y );
x--; y--;
if ( cerinta == 1 )
uneste( x, y );
else {
if ( comp( x ) == comp( y ) )
fprintf( fout, "DA\n" );
else
fprintf( fout, "NU\n" );
}
}
fclose( fin );
fclose( fout );
return 0;
}