Pagini recente » Cod sursa (job #2025207) | Cod sursa (job #2179080) | Cod sursa (job #3237987) | Cod sursa (job #859779) | Cod sursa (job #689828)
Cod sursa(job #689828)
#include <fstream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
#define NMAX 250010
int S[NMAX];
int A[NMAX*2];
int P[NMAX];
int NrStramos[NMAX];
int N, M;
int nr=0;
void parcurge(int e, int min)
{
if (S[e] && !P[e]) parcurge(S[e], min);
nr++;
A[nr] = e;
if (!P[e]) P[e] = nr, NrStramos[e] = nr - min - 1;
}
int pStramos(int x, int p)
{
while (p){
if (NrStramos[x]>=p) return A[P[x]-p];
if (!NrStramos[A[P[x]-NrStramos[x]]]) return 0;
x = A[P[x]-NrStramos[x]];
p -= NrStramos[x];
}
return 0;
}
int main()
{
int i, x, p;
f >> N >> M;
for (i=1; i<=N; i++) f >> S[i];
for (i=N; i>0; i--)
if (!P[i]) parcurge(i,nr);
for (i=0; i<M; i++) {
f >> x >> p;
g << pStramos(x,p) << '\n';
}
}