Pagini recente » Cod sursa (job #2866743) | Cod sursa (job #2143045) | Cod sursa (job #2095499) | Cod sursa (job #2076319) | Cod sursa (job #2073188)
#include <iostream>
#include <fstream>
#include <string>
#define NMAX 100003
int points[NMAX];
int lengths[NMAX];
using namespace std;
int rooter(int target) {
int root = target;
while (root != points[root]) {
points[root] = points[points[root]];
root = points[root];
}
return root;
}
void unite(int point1, int point2) {
int root1 = rooter(point1);
int root2 = rooter(point2);
if (root1 != root2) {
if (lengths[root1] > lengths[root2]) {
points[root2] = root1;
lengths[root1] += lengths[root2];
}
else {
points[root1] = root2;
lengths[root2] += lengths[root1];
}
}
}
int main() {
ifstream input("disjoint.in");
ofstream output("disjoint.out");
int n, m;
input >> n >> m;
for (int i = 1; i <= n; ++i) {
points[i] = i;
lengths[i] = 1;
}
int order, from, to;
for (int i = 0; i < m; ++i) {
input >> order >> from >> to;
if (order == 1) {
unite(rooter(from), rooter(to));
}
else {
if (rooter(from) == rooter(to)) {
output << "DA" << endl;
}
else {
output << "NU" << endl;
}
}
}
input.close();
output.close();
return 0;
}