Pagini recente » Cod sursa (job #2505649) | Cod sursa (job #1276999) | Cod sursa (job #1355616) | Cod sursa (job #584206) | Cod sursa (job #1343858)
#include<iostream>
#include<fstream>
#include<vector>
#define NMAX 250001
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
vector<int>v[NMAX];
vector<int>el;
vector<bool>uz(NMAX,false);
int n,m,len=0;
int first[NMAX];
void read()
{
fin>>n>>m;
int tata;
for(int i=1;i<=n;i++)
{
fin>>tata;
if(tata)
v[tata].push_back(i);
}
}
void dfs(int x)
{
len++;
first[x]=len;
uz[x]=true;
el.push_back(x);
for(int i=0;i<v[x].size();i++)
{
if(!uz[v[x][i]])
{
dfs(v[x][i]);
len++;
el.push_back(x);
}
}
}
void construct()
{ el.push_back(0);
for(int i=1;i<=n;i++)
{if(!uz[i])
{dfs(i);
len++;el.push_back(0);}
}}
void det(int nod,int care)
{
int ct=0;
while(el[first[nod]-1]!=0&&ct<care)
{
ct++;
nod=el[first[nod]-1];
}
if(ct==care)
fout<<nod<<'\n';
else
fout<<"0"<<'\n';
}
void solve()
{ int nod,st;
for(int i=1;i<=m;i++)
{
fin>>nod>>st;
det(nod,st);
}
}
int main()
{
read();
construct();
solve();
fin.close();
fout.close();
return 0;
}