Pagini recente » Cod sursa (job #805900) | Cod sursa (job #2711247) | Cod sursa (job #2715321) | Cod sursa (job #888255) | Cod sursa (job #1526694)
#include <fstream>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cstdio>
#define N 250001
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int p,q,i,n,m,x;
bool radacini[N];
vector<int>stiva,lista[N],v[N];
void completare(int k,int t)
{
int i,j,val;
for(j=0;j<stiva.size();j++)
lista[k].push_back(stiva[j]);
stiva.push_back(k);
for(i=0;i<v[k].size();i++)
{
val = v[k][i];
if(val!=t)
{
completare(val,k);
stiva.pop_back();
}
}
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;
if(x!=0)
{
v[i].push_back(x);
v[x].push_back(i);
}
else
radacini[i]=1;
}
for(i=1;i<=n;i++)
{
if(radacini[i])
{
completare(i,0);
while(!stiva.empty())
stiva.pop_back();
}
}
for(i=1;i<=m;i++)
{
fin>>p>>q;
n = lista[p].size();
if(q > n)
fout<<0<<"\n";
else
fout<< lista[p][n-q] <<"\n";
}
return 0;
}