Pagini recente » Cod sursa (job #711083) | Cod sursa (job #2395435) | Cod sursa (job #3147228) | Cod sursa (job #168280) | Cod sursa (job #2306971)
#include <fstream>
using namespace std ;
ifstream f ("disjoint.in") ;
ofstream g ("disjoint.out") ;
const int NR = 100001 ;
int father [ NR ] ;
int grad [ NR ] ;
int root ( int x )
{
int Root ;
for( Root = x ; father [ x ] != x ; x = father [ x ] , Root = x ) ;
for ( ; father [ x ] != Root ; )
{
int y = father [ x ] ;
father [ x ] = Root ;
x = y ;
}
return Root ;
}
int unite ( int x , int y )
{
if ( grad [ x ] < grad [ y ] )
father [ x ] = y ;
else
father [ y ] = x ;
if ( grad [ x ] == grad [ y ] )
grad [ x ] ++ ;
}
int main ()
{
int n , m , i ; f >> n >> m ;
for ( i = 1 ; i <= n ; ++ i )
grad [ i ] = 1 , father [ i ] = i ;
while ( m -- )
{
int type , x1 ,x2 ;
f >> type >> x1 >> x2 ;
if ( type == 1 ) unite ( root ( x1 ) , root ( x2 ) ) ;
if ( type == 2 )
{
if ( root ( x1 ) == root ( x2 ) ) g << "DA\n" ;
else g << "NU\n" ;
}
}
}