Pagini recente » Cod sursa (job #2252928) | Cod sursa (job #2855823) | Cod sursa (job #2691926) | Cod sursa (job #2631989) | Cod sursa (job #2905050)
#include <bits/stdc++.h>
using namespace std;
int find(int node, vector<int> &parent)
{
while(node != parent[node])
node = parent[node];
return node;
}
void unite(int n1, int n2, vector<int> &parent, vector<int> &rang)
{
if (rang[n1] <= rang[n2]) {
parent[n1] = parent[n2];
rang[n1] = rang[n2] + 1;
} else {
parent[n2] = parent[n1];
rang[n2] = rang[n1] + 1;
}
}
int main()
{
int n, m;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
fin >> n >> m;
vector<int> parent(n + 1, -1);
vector<int> rang(n + 1, 0);
for (int i = 0; i < m; ++i) {
int op;
fin >> op;
int x, y;
fin >> x >> y;
if (parent[x] == -1)
parent[x] = x;
if (parent[y] == -1)
parent[y] = y;
if (op == 1) {
unite(x, y, parent, rang);
} else {
if (find(x, parent) == find(y, parent)) {
fout << "DA\n";
} else {
fout << "NU\n";
}
}
}
fin.close();
fout.close();
return 0;
}