Pagini recente » Cod sursa (job #1671421) | Cod sursa (job #953349) | Cod sursa (job #455836) | Cod sursa (job #1630731) | Cod sursa (job #1990381)
#include <iostream>
#include <fstream>
#include <vector>
struct node {
int parent;
int val;
int level;
};
int findParent(int ind, std::vector<node> &myV) {
if (myV[ind].parent != ind) {
myV[ind].parent = findParent(myV[ind].parent, myV);
}
return myV[ind].parent;
}
void makeUnion(int a, int b, std::vector<node> &myV) {
a = findParent(a, myV);
b = findParent(b, myV);
if (myV[a].level > myV[b].level) {
myV[b].parent = a;
} else if (myV[a].level < myV[b].level) {
myV[a].parent = b;
} else {
myV[a].level++;
myV[b].parent = a;
}
}
int main() {
std::ifstream fileIn("disjoint.in");
std::ofstream fileOut("disjoint.out");
int nV, nO;
fileIn >> nV >> nO;
std::vector<node> myV(nV + 1);
for (int i(1); i <= nV; i++) {
myV[i].val = i;
myV[i].parent = i;
myV[i].level = 1;
}
int a, b, c;
for (; nO > 0; nO--) {
fileIn >> a >> b >> c;
if (a == 1) {
makeUnion(b, c, myV);
} else {
if (findParent(b, myV) == findParent(c, myV)) {
fileOut << "DA\n";
} else {
fileOut << "NU\n";
}
}
}
fileIn.close();
fileOut.close();
return 0;
}