Pagini recente » Cod sursa (job #1509116) | Cod sursa (job #1662200) | Cod sursa (job #2913354) | Cod sursa (job #889846) | Cod sursa (job #674621)
Cod sursa(job #674621)
#include <fstream>
#include <vector>
#include <utility>
using namespace std;
#define dim 300003
ifstream fi ("stramosi.in");
ofstream fo ("stramosi.out");
int N, M, S[dim], R[dim];
vector <int> V[dim];
vector < pair <int, int> > Q[dim];
void cit ()
{
fi >> N >> M;
for (int i = 1, x; i <= N; i++)
{
fi >> x;
V[x].push_back (i);
}
for (int i = 1, q, p; i <= M; i++)
{
fi >> q >> p;
Q[q].push_back (make_pair (i, p));
}
}
void dfs (int n, int k)
{
S[k] = n;
for (int i = 0, j, r; i < Q[n].size(); i++)
{
j = Q[n][i].first;
r = Q[n][i].second;
if (r < k)
r = S[k - r];
else
r = 0;
R[j] = r;
}
for (int i = 0, f; i < V[n].size(); i++)
{
f = V[n][i];
dfs (f, k + 1);
}
}
void afi ()
{
for (int i = 1; i <= M; i++)
{
fo << R[i] << '\n';
}
}
int main ()
{
cit ();
dfs (0, 0);
afi ();
return 0;
}