Pagini recente » Cod sursa (job #1077469) | Cod sursa (job #2386290) | Cod sursa (job #907099) | Cod sursa (job #1670404) | Cod sursa (job #2566228)
#include <bits/stdc++.h>
#define MAXN 200005
#define FILENAME std::string("disjoint")
std::ifstream input (FILENAME+".in");
std::ofstream output(FILENAME+".out");
int N, M, sets;
int parent[MAXN], rang[MAXN];
int _find(int x) {
if (x == parent[x]) return x;
return parent[x] = _find(parent[x]);
}
void _union(int x, int y) {
if (x == y) return;
-- sets;
if (rang[x] < rang[y]) parent[x] = y;
else parent[y] = x;
if (rang[x] == rang[y]) ++ rang[x];
}
int main()
{
input >> N >> M; sets = N;
for (int i=1; i<=N; ++i) parent[i] = i;
for (int i=1, t, x, y; i<=M; ++i) {
input >> t >> x >> y;
if (t == 1) _union(_find(x), _find(y));
else output << (_find(x) == _find(y) ? "DA\n" : "NU\n");
}
return 0;
}