Pagini recente » Cod sursa (job #2614133) | Cod sursa (job #522135) | Cod sursa (job #2304273) | Cod sursa (job #2541354) | Cod sursa (job #2654611)
#include <fstream>
#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;
int main(int argc, char const *argv[])
{
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M;
fin >> N >> M;
unordered_map<int, int> i2s;
unordered_map<int, vector<int>> s2i;
for (int i = 1; i <= N; i++)
{
i2s[i] = i;
s2i[i] = vector<int>{i};
}
for (int i = 0; i < M; i++)
{
int op, x, y;
fin >> op >> x >> y;
if (op == 1)
{
auto xit = s2i.find(i2s[x]), yit = s2i.find(i2s[y]);
auto &xset = xit->second, &yset = yit->second;
if (xset.size() > yset.size())
{
xset.insert(xset.end(), yset.begin(), yset.end());
for (auto i : yset) i2s[i] = i2s[x];
s2i.erase(yit);
} else
{
yset.insert(yset.end(), xset.begin(), xset.end());
for (auto i : xset) i2s[i] = i2s[y];
s2i.erase(xit);
}
// for (auto p: i2s)
// cout << p.first << ": " << p.second << endl;;
// cout << endl;
// for (auto &p : s2i) {
// cout << p.first << ": ";
// for (auto i : p.second) {
// cout << i << ' ';
// }
// cout << endl;
// }
// cout << "~~~~~~~~~~~~~~~~" << endl;
} else {
if (i2s[x] == i2s[y])
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}