Pagini recente » Cod sursa (job #1979784) | Cod sursa (job #2848265) | Cod sursa (job #703153) | Cod sursa (job #89044) | Cod sursa (job #1663358)
#include <fstream>
#include<vector>
#define maxn 400001
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n,m,i,j,t,a,b;
int tata[maxn];
vector<int> v[maxn];
vector<int> querry[maxn];
vector<int> querrypos[maxn];
int sol[maxn],st[maxn];
void dfs(int nod,int level)
{
int i;
st[level]=nod;
for(i=0;i<querry[nod].size();++i)
{
if(level>querry[nod][i])
sol[querrypos[nod][i]]= st[level- querry[nod][i]];
}
for(i=0;i<v[nod].size();++i)
dfs(v[nod][i],level+1);
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;++i)
{
fin>>tata[i];
v[tata[i]].push_back(i);
}
for(i=1;i<=m;++i)
{
fin>>a>>b;
querry[a].push_back(b);
querrypos[a].push_back(i);
}
for(i=1;i<=n;++i)
{
if(tata[i]==0)
dfs(i,1);
}
for(i=1;i<=m;++i)
fout<<sol[i]<<'\n';
return 0;
}