Pagini recente » Cod sursa (job #2604461) | Cod sursa (job #2605055) | Cod sursa (job #2605074) | Cod sursa (job #2884635) | Cod sursa (job #2884638)
#include <bits/stdc++.h>
#define maxV 250005
std::ifstream fin("stramosi.in");
std::ofstream fout("stramosi.out");
std::vector <int> parent[20];
int main() {
int V, Q;
fin >> V >> Q;
for(int i = 0; i < 20; i ++)
parent[i].resize(V + 1);
for(int i = 1; i <= V; i ++) {
fin >> parent[0][i];
}
for(int i = 1; i <= V; i ++) {
for(int step = 1, p2 = 1; p2 < V; step ++, p2 <<= 1) {
int prev1 = parent[step-1][i];
int prev2 = parent[step-1][prev1];
if(prev1 and prev2)
parent[step][i] = prev2;
else break;
}
}
while(Q --) {
int node, k;
fin >> node >> k;
for(int i = log2(k)+1; i >= 0 and node; i --) {
if((k & (1<<i)) != 0) {
node = parent[i][node];
}
}
fout << node << '\n';
}
return 0;
}