Pagini recente » Cod sursa (job #3222809) | Cod sursa (job #326790) | Cod sursa (job #1544434) | Cod sursa (job #349010) | Cod sursa (job #2531155)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define NMAX 100000
int father[NMAX + 1];
int root( int i ) {
if ( father[i] == i )
return i;
return father[i] = root( father[i] );
}
void unire( int i, int j ) {
father[root( j )] = root( i );
}
FILE *fin, *fout;
int numar() {
char ch;
int nr = 0;
while ( isspace( ch = fgetc( fin ) ) );
do {
nr = nr * 10 + ch - '0';
} while ( isdigit( ch = fgetc( fin ) ) );
return nr;
}
int main() {
fin = fopen( "disjoint.in", "r" );
fout = fopen( "disjoint.out", "w" );
int n, m, i, nod1, nod2;
char cer;
n = numar();
m = numar();
for ( i = 1; i <= n; i ++ ) {
father[i] = i;
}
for ( i = 0; i < m; i ++ ) {
cer = numar();
nod1 = numar();
nod2 = numar();
switch ( cer ) {
case 1:
unire( nod1, nod2 );
break;
case 2:
if ( root( nod1 ) == root( nod2 ) )
fprintf( fout, "DA\n" );
else
fprintf( fout, "NU\n" );
break;
}
}
fclose( fin );
fclose( fout );
return 0;
}