Pagini recente » Cod sursa (job #1268365) | Cod sursa (job #2572416) | Cod sursa (job #2417406) | Cod sursa (job #1380278) | Cod sursa (job #2417400)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("disjoint.in");
ofstream g ("disjoint.out");
const int Inf = 1e9 + 5;
const int Dim = 1e5 + 5;
int p[Dim], w[Dim];
int n, m;
int Find (int node) {
int cp = node;
while (p[cp] != cp) {
cp = p[cp];
}
while (node != cp) {
int aux = p[node];
p[node] = cp;
node = aux;
}
return node;
}
void Union (int n1, int n2) {
if (Find(n1) == Find(n2))
return;
if (w[n1] < w[n2]) {
p[n2] = n1;
w[n1] += w[n2];
}
else {
p[n1] = n2;
w[n2] += w[n1];
}
}
int main() {
f >> n >> m;
for (int i = 1; i <= n; ++ i) {
p[i] = i, w[i] = 1;
}
for (int i = 1; i <= m; ++ i) {
int type, x, y; f >> type >> x >> y;
if (type == 1) {
Union (x, y);
}
else {
if (Find(x) == Find (y)) g << "DA\n";
else g << "NU\n";
}
}
return 0;
}