Pagini recente » Cod sursa (job #674497) | Cod sursa (job #345928) | Cod sursa (job #297715) | Cod sursa (job #1295548) | Cod sursa (job #3242355)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMax = 100005;
int d[NMax], h[NMax];
int up(int x){
if(d[x] != 0){
d[x] = up(d[x]);
return d[x];
}
else{
return x;
}
}
void unite(int x, int y){
int rX = up(x), rY = up(y);
if(h[rX] > h[rY]){
d[rY] = rX;
h[rY] = max(h[rY], h[rX] + 1);
up(y);
}
else{
d[rX] = rY;
h[rX] = max(h[rX], h[rY] + 1);
up(x);
}
}
void query(int x, int y){
if(up(x) == up(y)){
fout << "DA\n";
}
else{
fout << "NU\n";
}
}
int main()
{
int N, M;
fin >> N >> M;
for(int i = 1; i <= N; ++ i){
h[i] = 1;
}
for(int op, x, y, i = 1; i <= M; ++ i){
fin >> op >> x >> y;
if(op == 1){
unite(x, y);
}
else{
query(x, y);
}
}
return 0;
}