Pagini recente » Cod sursa (job #1247377) | Cod sursa (job #3143428) | Cod sursa (job #1496468) | Cod sursa (job #2282080) | Cod sursa (job #1879754)
#include <bits/stdc++.h>
using namespace std;
constexpr int maxn = 1e5 + 10;
int tata[maxn] = {}, rk[maxn] = {};
int find_set(const int x){
return tata[x] ? (tata[x] = find_set(tata[x])) : x; }
void merge_set(int x, int y){
x = find_set(x), y = find_set(y);
if(x == y) return;
if(rk[x] < rk[y]) swap(x, y);
if(rk[x] == rk[y]) ++rk[x];
tata[y] = x; }
bool together(int x, int y){
return find_set(x) == find_set(y); }
int main() {
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m;
f >> n >> m;
for(int i = 0, t, x, y; i < m; ++i){
f >> t >> x >> y;
if(t == 1) merge_set(x, y);
else g << (together(x, y) ? "DA" : "NU") << '\n'; }
return 0; }