Pagini recente » Cod sursa (job #3224154) | Cod sursa (job #82553) | Cod sursa (job #3036928) | Cod sursa (job #2401136) | Cod sursa (job #1968554)
#include <fstream>
#include <iostream>
#include <vector>
#include <bitset>
#define FOR(i, n) for (int i = 1; i <= n; ++i)
#define iter vector<int>::iterator
#define N 250001
using namespace std;
bitset<N> E;
vector<int> L[N], V[N], S;
void dfs(int node) {
E[node] = 1;
S.push_back(node);
for (iter it = L[node].begin(); it != L[node].end(); ++it)
dfs(*it);
int len = S.size();
for (int step = 1, k = 0; step < len; step <<= 1, ++k) {
V[node].push_back(S[len - step - 1]);
}
S.pop_back();
}
int main() {
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, m;
fin >> n >> m;
FOR(i, n) {
int x;
fin >> x;
if (x)
L[x].push_back(i);
}
FOR(i, n) {
if (!E[i]) {
dfs(i);
}
}
while (m--) {
int node, p;
fin >> node >> p;
int step = 1;
for (int k = 0; k < V[node].size() && step <= p; step <<= 1, ++k)
if (step & p)
node = V[node][k];
fout << (step > p ? node : 0) << "\n";
}
return 0;
}