Pagini recente » Cod sursa (job #2654322) | Cod sursa (job #1833999) | Borderou de evaluare (job #2782912) | Cod sursa (job #2551088) | Cod sursa (job #2654622)
#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<vector<int>> s2i;
i2s.reserve(N); s2i.reserve(N);
for (int i = 0; i < N; i++)
{
i2s.push_back(i);
s2i.push_back(vector<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];
vector<int> &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();
} else
{
yset.insert(yset.end(), xset.begin(), xset.end());
for (auto i : xset) i2s[i] = yid;
xset.clear();
}
} else {
if (i2s[x] == i2s[y])
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}