Pagini recente » Cod sursa (job #2589875) | Cod sursa (job #2565392) | Cod sursa (job #1591457) | Cod sursa (job #2530235) | Cod sursa (job #3297921)
#include <fstream>
#include <vector>
using namespace std;
ifstream f ("stramosi.in");
ofstream g ("stramosi.out");
int parent_nodes[250000];
int up[250000][18];
int main() {
int N, M;
f >> N >> M;
for (int i = 1; i <= N; ++i) {
f >> parent_nodes[i];
}
for (int i = 0; i <= N; ++i) {
up[i][0] = parent_nodes[i];
}
for (int j = 1; j < 17; ++j) {
for (int i = 0; i <= N; ++i) {
up[i][j] = up[ up[i][j-1] ][j-1];
}
}
for (int k_query = 0; k_query < M; ++k_query) {
int Q_node;
int P_steps;
f >> Q_node >> P_steps;
int current_ancestor_node = Q_node;
for (int j = 17; j >= 0; --j) {
if (current_ancestor_node == 0) {
break;
}
if ((P_steps >> j) & 1) {
current_ancestor_node = up[current_ancestor_node][j];
}
}
g << current_ancestor_node << "\n";
}
return 0;
}