Pagini recente » Cod sursa (job #1670493) | Borderou de evaluare (job #156762) | Cod sursa (job #212630) | Cod sursa (job #1984293) | Cod sursa (job #3274137)
#include <fstream>
using namespace std;
int card[100005], rad[100005];
int find(int x){
if( rad[x] == x ){
return x;
}
rad[x] = find( rad[x] );
return rad[x];
}
void unite(int x, int y){
if( card[x] < card[y] ){
swap( x, y );
}
rad[y] = x;
card[x] += card[y];
}
int main(){
int n, m, i, tip, x, y, rad_x, rad_y;
ifstream fin( "disjoint.in" );
ofstream fout( "disjoint.out" );
fin >> n >> m;
for( i = 1; i <= n; i++ ){
card[i] = 1;
rad[i] = i;
}
for( i = 0; i < m; i++ ){
fin >> tip >> x >> y;
if( tip == 1 ){
rad_x = find( x );
rad_y = find( y );
if( rad_x != rad_y ){
unite( rad_x, rad_y );
}
}
else{
if( find(x) == find(y) ){
fout << "DA\n";
}
else{
fout << "NU\n";
}
}
}
return 0;
}