Pagini recente » Cod sursa (job #3168041) | Cod sursa (job #2943880) | Cod sursa (job #2494055) | Cod sursa (job #2923911) | Cod sursa (job #2845138)
#include <fstream>
using namespace std;
ifstream cin ( "disjoint.in" );
ofstream cout ( "disjoint.out" );
#define NMAX 100000
int parent[NMAX + 1], inaltime[NMAX + 1];
int find(int x) {
if ( parent[x] == x )
return x;
parent[x] = find(parent[x]);
return parent[x];
}
void merge( int x, int y ) {
int multX, multY;
multX = find(x);
multY = find(y);
if ( multX != multY ) {
if ( inaltime[x] < inaltime[y] ) {
parent[multX] = multY;
}
else if ( inaltime[y] < inaltime[x] ) {
parent[multY] = multX;
}
else {
parent[multX] = multY;
inaltime[multY]++;
}
}
}
int main() {
int n, m, tip, x, y, i;
cin >> n >> m;
for ( i = 0; i < n; i++ ) {
parent[i] = i;
inaltime[i] = 1;
}
for ( i = 0; i < m; i++ ) {
cin >> tip >> x >> y;
if ( tip == 1 ) {
merge(x, y);
}
else {
cout << ( find(x) == find(y) ? "DA\n" : "NU\n" );
}
}
return 0;
}