Pagini recente » Cod sursa (job #3203648) | Cod sursa (job #2048792) | Cod sursa (job #1691763) | Rating Popescu Ion (iiot) | Cod sursa (job #1371383)
#include <iostream>
#include <fstream>
const int MAXN = 100005;
std::ifstream f("disjoint.in");
std::ofstream g("disjoint.out");
int parent[MAXN]; int n;
void unite(int x, int y)
{
while (x != parent[x]) {
int aux = parent[x];
parent[x] = y;
x = aux;
}
parent[x] = y;
while (y != parent[y]) {
int aux = parent[y];
parent[y] = y;
y = aux;
}
}
void query(int x, int y)
{
int cx = x, cy = y;
while (parent[x] != x) {
x = parent[x];
}
while (parent[y] != y) {
y = parent[y];
}
if (x == y) {
g << "DA\n";
while (cx != parent[cx]) {
int aux = parent[cx];
parent[cx] = y;
cx = aux;
}
while (cy != parent[cy]) {
int aux = parent[cy];
parent[cy] = y;
cy = aux;
}
}
else {
g << "NU\n";
}
}
int main()
{
int m;
f >> n >> m;
for (int i = 1; i <= n; i++) {
parent[i] = i;
}
for (int i = 1, op, x, y; i <= m; i++) {
f >> op >> x >> y;
if (op == 1) unite(x, y);
if (op == 2) query(x, y);
}
//system("pause");
f.close();
g.close();
return 0;
}