Pagini recente » Cod sursa (job #2313674) | Cod sursa (job #1340608) | Cod sursa (job #258155) | Cod sursa (job #588964) | Cod sursa (job #3207073)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n, q;
vector<int> parent;
vector<int> rang;
int find(int x) {
int repX;
for (repX = x; parent[repX] != repX; repX = parent[repX]);
int p = repX;
for (repX = x; parent[repX] != repX; repX = parent[repX])
{
parent[repX] = p;
}
return repX;
}
void unire(int x, int y) {
if (find(x) != find(y))
{
if (rang[x] > rang[y]) parent[y] = x;
else parent[x] = y;
if (rang[x] == rang[y]) rang[y]++;
}
}
int main()
{
cin >> n >> q;
parent.resize(n + 1);
rang.resize(n + 1);
for (int i = 1; i <= n; i++) parent[i] = i;
while (q--)
{
int caz, x, y;
cin >> caz >> x >> y;
if (caz == 1)
{
unire(x, y);
}
else
{
if (find(x) == find(y)) cout << "DA\n";
else cout << "NU\n";
}
}
}