Pagini recente » Cod sursa (job #2371966) | Cod sursa (job #675702) | Cod sursa (job #626143) | Cod sursa (job #2388296) | Cod sursa (job #1976240)
#include <vector>
#include <cassert>
#include <fstream>
#include <string>
class SetManager {
private:
std::vector<int> m_vGroup;
public:
SetManager(int n) {
m_vGroup = std::vector<int>(n + 1, 0);
for (int i = 1; i <= n; i++)
m_vGroup[i] = i;
}
int groupId(int id) {
assert(id >= 0 && id < (signed)m_vGroup.size());
if (id != m_vGroup[id])
m_vGroup[id] = groupId(m_vGroup[id]);
return m_vGroup[id];
}
void unite(int id1, int id2) {
m_vGroup[groupId(id1)] = groupId(id2);
}
};
int main() {
std::string answer[2] = {"NU", "DA"};
int count;
int operations_count;
std::ifstream cin("disjoint.in");
std::ofstream cout("disjoint.out");
cin >> count >> operations_count;
SetManager s(count);
for (int i = 0; i < operations_count; i++) {
int operation;
int a1, a2;
cin >> operation >> a1 >> a2;
switch(operation) {
case 1:
s.unite(a1, a2);
break;
case 2:
cout << answer[s.groupId(a1) == s.groupId(a2)] << "\n";
break;
default:
break;
}
}
cin.close();
cout.close();
return 0;
}