Pagini recente » Rating Balint florin (Florin93) | Cod sursa (job #681133) | Cod sursa (job #1228087) | Cod sursa (job #1019524) | Cod sursa (job #1640072)
#include <fstream>
#include <vector>
class SetGroup
{
private:
std::vector<int> v;
inline int get(int x) {
while(v[x] != 0) x = v[x];
return x;
}
inline void mark(int x, int mark) {
int aux;
while(v[x] != 0) {
aux = v[x];
v[x] = mark;
x = aux;
}
}
public:
SetGroup() {
}
SetGroup(int n_sets) : v(n_sets+1) {
}
bool areJoint(int x, int y) {
int a = get(x);
int b = get(y);
mark(x, a);
mark(y, b);
return a == b;
}
void uniteSets(int x, int y) {
int a = get(x);
int b = get(y);
if(a != b) v[a] = b;
}
void addSet() {
v.push_back(0);
}
int getSize() {
return v.size();
}
};
int main()
{
std::ifstream in("disjoint.in");
std::ofstream out("disjoint.out");
int n, m;
in>>n>>m;
SetGroup forest(n);
for(int a, b, c, i = 1; i <= m; ++i) {
in>>c>>a>>b;
switch(c) {
case 1:
forest.uniteSets(a, b);
break;
case 2:
if(forest.areJoint(a, b)) out<<"DA\n";
else out<<"NU\n";
break;
}
}
return 0;
}