Pagini recente » Cod sursa (job #2352248) | Cod sursa (job #95771) | Cod sursa (job #2589451) | Cod sursa (job #367300) | Cod sursa (job #833857)
Cod sursa(job #833857)
#include <cstdlib>
#include <fstream>
#include <iostream>
using namespace std;
const int MAX_N = 100100;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int father[MAX_N];
int N, M;
void build_sets();
void unite_sets(int node1, int node2);
bool query(int node1, int node2);
int find_root(int node);
int main() {
fin >> N >> M;
build_sets();
for (int i = 1; i <= M; ++i) {
int cod, x, y;
fin >> cod >> x >> y;
if (cod == 1) {
unite_sets(x, y);
} else if (query(x, y)) {
fout << "DA" << '\n';
} else {
fout << "NU" << '\n';
}
}
return 0;
}
void build_sets() {
for (int i = 1; i <= N; ++i) {
father[i] = i;
}
}
void unite_sets(int node1, int node2) {
int root1 = find_root(node1);
int root2 = find_root(node2);
if (root1 == root2) return;
if (rand() & 1) {
father[root1] = root2;
} else {
father[root2] = root1;
}
}
int find_root(int node) {
if (father[node] == node)
return node;
return (father[node] = find_root(father[node]));
}
inline bool query(int node1, int node2) {
if (find_root(node1) == find_root(node2))
return true;
return false;
}