Pagini recente » Monitorul de evaluare | Atasamentele paginii Poze preONI 2007 - gratar | Cod sursa (job #1183766) | Cod sursa (job #2531750) | Cod sursa (job #1791784)
#include <stdio.h>
#include <ctype.h>
#define buff_size 1<<17
#define nmax 100000
int v[nmax+1];
int pozr, pozw;
char bufferr[buff_size], bufferw[buff_size];
FILE *fin, *fout;
char getch(){
if( pozr == buff_size ){
fread( bufferr, buff_size, 1, fin );
pozr = 0;
}
return bufferr[ pozr++ ];
}
int scano(){
int nr = 0;
char ch = getch();
while( isdigit(ch) == 0 )
ch = getch();
while( isdigit(ch) != 0 ){
nr = nr * 10 + ch - '0';
ch = getch();
}
return nr;
}
void putch( char ch ){
bufferw[ pozw++ ] = ch;
if( pozw == buff_size ){
fwrite( bufferw, buff_size, 1, fout );
pozw = 0;
}
}
void printo( int ver ){
if( ver==0 ){
putch( 'N' );
putch( 'U' );
putch( '\n' );
}
else{
putch( 'D' );
putch( 'A' );
putch( '\n' );
}
}
void generare( int n ){
int i;
for( i=1; i<=n; i++ )
v[i] = i;
}
int find( int nr ){
if( v[nr]==nr )
return nr;
else{
v[nr] = find( v[nr] );
return v[nr];
}
}
void unite( int a, int b ){
int pa, pb;
pa = find( a );
pb = find( b );
if( pa!=pb ){
v[pa] = pb;
}
}
int main()
{
int n, m, i, ver, a, b;
fin = fopen( "disjoint.in", "r" );
fout = fopen( "disjoint.out", "w" );
n = scano(); m = scano();
generare( n );
for( i=0; i<m; i++ ){
ver = scano(); a = scano(); b = scano();
if( ver==1 )
unite( a, b );
else{
if( find(a) == find(b) )
printo( 1 );
else
printo( 0 );
}
}
if( pozw<buff_size )
fwrite( bufferw, pozw, 1, fout );
fclose( fin );
fclose( fout );
return 0;
}