Pagini recente » Cod sursa (job #3271069) | Cod sursa (job #3265648) | Cod sursa (job #3250555) | Cod sursa (job #2800390) | Cod sursa (job #2263980)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 100001
int p[NMAX], rang[NMAX];
int parent(int x) {
int aux = x;
while (x != p[x]) {
x = p[x];
}
int r = x;
x = aux;
while (x != p[x]) {
int aux = p[x];
p[x] = r;
x = aux;
}
return r;
}
void unite(int x, int y) {
x = parent(x);
y = parent(y);
if (rang[x] < rang[y]) {
p[x] = y;
} else {
p[y] = x;
}
if (rang[x] == rang[y]) {
rang[x]++;
}
}
int main()
{
int n, m;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
f >> n >> m;
for (int i = 1; i <= n; i++) {
p[i] = i;
rang[i] = 0;
}
for (int i = 1; i <= m; i++) {
int opt, x, y;
f >> opt >> x >> y;
if (opt == 1) {
unite(x, y);
} else {
if (parent(x) == parent(y)) {
g << "DA\n";
}
else {
g << "NU\n";
}
}
}
return 0;
}