Pagini recente » Cod sursa (job #2443001) | Cod sursa (job #2939141) | Cod sursa (job #803481) | Cod sursa (job #943190) | Cod sursa (job #1425720)
#include <iostream>
#include <fstream>
#define MAX 100002
using namespace std;
ifstream f ("disjoint.in" , ios::in) ;
ofstream g ("disjoint.out" , ios::out) ;
int vader [ MAX ];
int rg [ MAX ];
void makeSet ( int n){
vader [ n ] = n ;
rg [ n ] = 0;
}
void Answer ( int x , int y){
while ( x != vader [ x ] )
x = vader [ x ];
while ( y != vader [ y ] )
y = vader [ y ];
if ( y == x)
g<<"DA \n";
else
g<<"NU \n";
}
int findParent ( int x){
//path compresion
if ( vader [ x ] != x )
vader [ x ] = findParent( vader [ x ] ) ;
// else
return vader [ x ];
}
void Union ( int x , int y){
x = findParent ( x );
y = findParent ( y );
if ( rg [ x ] > rg [ y ] )
vader [ y ] = x ;
else
vader [ x ] = y;
if ( rg [ x ] == rg [ y ])
rg [ y ] ++;
}
int main()
{
int n , m , cd , y , x;
f>>n>>m;
while ( n ){
makeSet ( n );
n--;
}
while ( m ){
m--;
f>>cd>>x>>y;
if (cd == 1)
Union ( x , y );
else
Answer ( x , y);
}
return 0;
}