Pagini recente » Cod sursa (job #3249525) | Cod sursa (job #2825140) | Cod sursa (job #2468015) | Cod sursa (job #2085885) | Cod sursa (job #1049860)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector <int> fii[400002];
vector <pair <int,int> > res[400002];
vector <int> stiva;
int n,nq,i,j,nr,q,p,s,r[400002];
void go(int nod)
{
for (int i=0;i<res[nod].size();i++)
if (res[nod][i].first>stiva.size())
res[nod][i].first=0;
else
res[nod][i].first=stiva[stiva.size()-res[nod][i].first];
stiva.push_back(nod);
for (int i=0;i<fii[nod].size();i++)
go(fii[nod][i]);
stiva.pop_back();
}
int main(void)
{
FILE * f;
f=fopen("stramosi.in","r");
ofstream g("stramosi.out");
fscanf(f,"%d%d",&n,&nq);
for (i=1;i<=n;i++)
{
fscanf(f,"%d",&nr);
fii[nr].push_back(i);
}
for (i=1;i<=nq;i++)
{
fscanf(f,"%d%d",&q,&p);
res[q].push_back(make_pair(p,i));
}
for (i=0;i<fii[0].size();i++)
go(fii[0][i]);
for (i=1;i<=n;i++)
{
s=res[i].size();
for (j=0;j<res[i].size();j++)
r[res[i][j].second]=res[i][j].first;
}
for (i=1;i<=nq;i++)
g<<r[i]<<'\n';
return 0;
}