Pagini recente » Cod sursa (job #972884) | Cod sursa (job #193953) | Cod sursa (job #81692) | Cod sursa (job #374258) | Cod sursa (job #2948533)
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
#define cin f
#define cout g
vector<int> size;
vector<int> parent;
int find(int node) {
int boss = node;
while (boss != parent[boss])
boss = parent[boss];
while (node != boss) {
int aux = parent[node];
parent[node] = boss;
node = aux;
}
return boss;
}
void unite(int u, int v) {
int parent_u = find(u);
int parent_v = find(v);
if (parent_u == parent_v)
return;
if (size[u] > size[v]) {
parent[v] = u;
size[u] += size[v];
} else {
parent[u] = v;
size[v] += size[u];
}
}
int main() {
int n, m;
cin >> n >> m;
size.resize(n+1, 1);
parent.resize(n+1);
for (int i = 1; i <= n; i++)
parent[i] = i;
for (int i = 0; i < m; i++) {
int query, u, v;
cin >> query >> u >> v;
if (query == 1)
unite(u, v);
else
cout << (find(u) == find(v) ? "DA\n" : "NU\n");
}
return 0;
}