Pagini recente » Cod sursa (job #926671) | Cod sursa (job #2865710) | Cod sursa (job #255178) | Cod sursa (job #2207094) | Cod sursa (job #2780186)
//
// Created by Andrei Covaci on 03.09.2021.
//
#include <fstream>
#include <iostream>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <queue>
using namespace std;
#define INPUT "disjoint.in"
#define OUTPUT "disjoint.out"
//#define INPUT "input.in"
//#define OUTPUT "output.out"
int dis[100001];
int n;
vector<tuple<int, int, int>> read() {
ifstream in(INPUT);
vector<tuple<int, int, int>> res;
int m, s, x, y;
in >> n >> m;
for(; m; --m) {
in >> s >> x >> y;
res.emplace_back(s, x, y);
}
in.close();
return res;
}
void init() {
for(int i = 1; i <= n; ++i) {
dis[i] = i;
}
}
void unite(int x, int y) {
dis[x] = y;
}
int find(int x) {
if(dis[x] == x) {
return x;
}
int father = find(dis[x]);
dis[x] = father;
return father;
}
vector<bool> solve(vector<tuple<int, int, int>>& ins) {
vector<bool> res;
init();
for(auto t : ins) {
int x = get<1>(t), y = get<2>(t);
if(get<0>(t) == 1) {
unite(x, y);
} else {
if(find(x) == find(y))
res.emplace_back(true);
else
res.emplace_back(false);
}
}
return res;
}
void print(vector<bool> res) {
ofstream out(OUTPUT);
for(auto b : res) {
if (b)
out << "DA\n";
else
out << "NU\n";
}
out.close();
}
int main() {
auto in = read();
auto out = solve(in);
print(out);
return 0;
}