Pagini recente » Cod sursa (job #251736) | Cod sursa (job #1566604) | Cod sursa (job #808536) | Cod sursa (job #606938) | Cod sursa (job #3207069)
#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]);
return repX;
}
void unire(int x, int y) {
if (find(x) != find(y))
{
if (rang[x] > rang[y]) parent[y] = x;
else if (rang[x] == rang[y])
{
parent[y] = x;
rang[x]++;
}
else parent[x] = 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";
}
}
}