Pagini recente » Cod sursa (job #2599055) | Cod sursa (job #3334662) | Cod sursa (job #2430476) | Cod sursa (job #223303) | Cod sursa (job #3357996)
#include <fstream>
using namespace std;
const int NMAX = 100005;
int tata[NMAX], rang[NMAX];
int find(int nod) {
if (tata[nod] == nod) return nod;
int aux = find(tata[nod]);
tata[nod] = aux; // compresia drumurilor
return aux;
}
void reuneste(int x, int y) {
int radacina_x = find(x);
int radacina_y = find(y);
if (rang[radacina_x] > rang[radacina_y]) {
tata[radacina_y] = radacina_x;
} else {
tata[radacina_x] = radacina_y;
if (rang[radacina_x] == rang[radacina_y]) {
rang[radacina_y]++;
}
}
}
int main() {
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M;
fin >> N >> M;
for (int i = 1; i <= N; i++) {
tata[i] = i;
rang[i] = 0;
}
for (int i = 1; i <= M; i++) {
int cod, x, y;
fin >> cod >> x >> y;
if (cod == 1) {
reuneste(x, y);
} else {
if (find(x) == find(y)) {
fout << "DA\n";
} else {
fout << "NU\n";
}
}
}
fin.close();
fout.close();
return 0;
}