Pagini recente » Cod sursa (job #3004955) | Cod sursa (job #96188) | Cod sursa (job #2198294) | Cod sursa (job #2865539) | Cod sursa (job #2654628)
#include <fstream>
#include <iostream>
#include <vector>
#include <list>
using namespace std;
int main(int argc, char const *argv[])
{
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int N, M;
fin >> N >> M;
vector<int> i2s;
vector<list<int>> s2i;
i2s.reserve(N); s2i.reserve(N);
for (int i = 0; i < N; i++)
{
i2s.push_back(i);
s2i.push_back(list<int>{i});
}
for (int i = 0; i < M; i++)
{
int op, x, y;
fin >> op >> x >> y;
x--; y--;
if (op == 1)
{
int xid = i2s[x], yid = i2s[y];
auto &xset = s2i[xid], &yset = s2i[yid];
if (xset.size() > yset.size())
{
// xset.insert(xset.end(), yset.begin(), yset.end());
for (auto i : yset) i2s[i] = xid;
// yset.clear();
xset.splice(xset.end(), yset);
} else
{
// yset.insert(yset.end(), xset.begin(), xset.end());
for (auto i : xset) i2s[i] = yid;
// xset.clear();
yset.splice(yset.end(), xset);
}
} else {
if (i2s[x] == i2s[y])
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}