Pagini recente » Cod sursa (job #2712793) | Cod sursa (job #2180510) | Cod sursa (job #1970512) | Cod sursa (job #905505) | Cod sursa (job #3230175)
#include <fstream>
using namespace std;
ifstream inputFile("stramosi.in");
ofstream outputFile("stramosi.out");
const int MAX_LOG = 20;
const int MAX_N = 250005;
int ancestors[MAX_LOG][MAX_N];
int numberOfNodes, numberOfQueries;
void calculateAncestors() {
// ancestors[level][node] = ancestor of 'node' at distance 2^level
for (int level = 1; level < MAX_LOG; ++level) {
for (int node = 1; node <= numberOfNodes; ++node) {
ancestors[level][node] = ancestors[level - 1][ancestors[level - 1][node]];
}
}
}
int main() {
inputFile >> numberOfNodes >> numberOfQueries;
for (int i = 1; i <= numberOfNodes; ++i) {
inputFile >> ancestors[0][i];
}
calculateAncestors();
for (int i = 1; i <= numberOfQueries; ++i) {
int node, distance;
inputFile >> node >> distance;
while (distance > 0) {
int level = 0;
while ((1 << (level + 1)) <= distance) {
++level;
}
distance -= (1 << level);
node = ancestors[level][node];
}
outputFile << node << "\n";
}
return 0;
}