Pagini recente » Cod sursa (job #1526694) | Cod sursa (job #618575) | Cod sursa (job #1433426) | Cod sursa (job #2684383) | Cod sursa (job #1295039)
#include <fstream>
using namespace std;
// Arbori pe nivele
// Cu programare dinamica
struct Node {
Node(Node* p, int v) : parent(p), val(v) {}
Node* parent;
int val;
};
int findAncestor(Node* node, int p)
{
if (node == nullptr) {
return 0;
}
else if (p == 0) {
return node->val;
}
else return findAncestor(node->parent, p - 1);
}
int main()
{
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int N, M, Q, P;
in >> N >> M;
Node** intToNode = new Node*[N + 1];
for (int i = 0; i <= N; i++) {
intToNode[i] = new Node(nullptr, i);
}
for (int i = 1; i <= N; i++) {
int x; in >> x;
intToNode[i]->parent = intToNode[x];
}
for (int i = 0; i < M; i++) {
in >> Q >> P;
out << findAncestor(intToNode[Q], P) << '\n';
}
for (int i = 0; i <= N; i++) {
delete intToNode[i];
}
delete[] intToNode;
in.close();
out.close();
}