Pagini recente » Cod sursa (job #63663) | Cod sursa (job #214632) | Cod sursa (job #1938232) | Cod sursa (job #1141840) | Cod sursa (job #2936632)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
void MakeSet(int u, int parent[], int h[]) {
parent[u] = 0;
h[u] = 0;
}
int Find(int u, int parent[]) {
if (parent[u] == 0) return u;
parent[u] = Find(parent[u], parent);
return parent[u];
}
void Union(int u, int v, int parent[], int h[]) {
int repU = Find(u, parent);
int repV = Find(v, parent);
if (h[repU] > h[repV]) {
parent[repV] = repU;
} else {
parent[repU] = repV;
if (h[repU] == h[repV]) h[repV]++;
}
}
int main() {
int parent[100001] = {0}, h[100001] = {0};
int m, n, x, y, code;
in >> n >> m;
for (int i = 1; i <= n; i++)
MakeSet(i, parent, h);
for (int i = 1; i <= m; i++) {
in >> code >> x >> y;
if (code == 1) {
Union(x, y, parent, h);
} else {
if (Find(x, parent) == Find(y, parent))
out << "DA\n";
else
out << "NU\n";
}
}
return 0;
}