Pagini recente » Cod sursa (job #1981896) | Cod sursa (job #1428088) | Cod sursa (job #1550815) | Istoria paginii runda/barosaneala420 | Cod sursa (job #1711433)
#include <fstream>
#include <vector>
using namespace std;
int main() {
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n, m;
cin >> n >> m;
vector<int> Set(n + 1);
vector<vector<int>> Nodes(n + 1);
for(int i = 1; i <= n; ++i) {
Set[i] = i;
Nodes[i].push_back(i);
}
while(m--) {
int t, a, b;
cin >> t >> a >> b;
if(t == 2) {
cout << (Set[a] == Set[b] ? "DA\n" : "NU\n");
} else {
a = Set[a]; b = Set[b];
if(Nodes[a].size() > Nodes[b].size())
swap(a, b);
Nodes[b].reserve(Nodes[a].size() + Nodes[b].size());
for(auto x : Nodes[a]) {
Set[x] = b;
Nodes[b].push_back(a);
}
Nodes[a].clear();
Nodes[a].shrink_to_fit();
}
}
return 0;
}