Pagini recente » Cod sursa (job #1770724) | Cod sursa (job #158873) | Cod sursa (job #2830140) | Cod sursa (job #189396) | Cod sursa (job #2094089)
#include <fstream>
#include <vector>
#define VAL 250005
#define QUER 300005
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int N, M, i, j;
int A, B, fat[VAL];
int ans[QUER];
int st[VAL], top;
vector <int> G[VAL];
vector < pair <int, int> > Q[VAL];
void DFS(int nod)
{
vector <int> :: iterator it;
vector < pair <int, int> > :: iterator it2;
st[++top]=nod;
for (it=G[nod].begin(); it!=G[nod].end(); it++)
{
for (it2=Q[*it].begin(); it2!=Q[*it].end(); it2++)
if (top-it2->first+1>0)
ans[it2->second]=st[top-it2->first+1];
DFS(*it);
}
top--;
}
int main()
{
fin >> N >> M;
for (i=1; i<=N; i++)
{
fin >> fat[i];
G[fat[i]].push_back(i);
}
for (i=1; i<=M; i++)
{
fin >> A >> B;
Q[A].push_back(make_pair(B, i));
}
for (i=1; i<=N; i++)
if (fat[i]==0)
DFS(i);
for (i=1; i<=M; i++)
fout << ans[i] << '\n';
fin.close();
fout.close();
return 0;
}