Pagini recente » Cod sursa (job #3000933) | Cod sursa (job #882167) | Cod sursa (job #2408481) | Cod sursa (job #819911) | Cod sursa (job #1977752)
#include <bits/stdc++.h>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,m,t[250005],d[250005],viz[250005],j,q,p;
vector<int>::iterator it;
vector<vector<int>>v(250005);
void df(int k)
{
viz[k]=1;
if(v[k].size())
for(it=v[k].begin();it<v[k].end();++it)
if(*it<=n && !viz[*it])
d[*it]=d[k]+1,df(*it);
}
int inapoi(int q,int p)
{
int k=q,nr=0;
while(k && nr<p)
nr++,k=t[k];
return k;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
f>>t[i],v[t[i]].push_back(i);
for(int i=1;i<=n;i++)
if(!t[i])
j=0,df(i);
for(int i=1;i<=m;i++)
{
f>>q>>p;
if(p>d[q])
g<<0<<'\n';
else
g<<inapoi(q,p)<<'\n';
}
return 0;
}