Pagini recente » Cod sursa (job #1911928) | Cod sursa (job #1507261) | Cod sursa (job #1215351) | Cod sursa (job #1103157) | Cod sursa (job #774225)
Cod sursa(job #774225)
#include<vector>
#include<fstream>
#define maxn 300010
#define pb push_back
using namespace std;
bool uz[maxn];
vector<int>a[maxn];
vector<int>query[maxn];
vector<int>ans[maxn];
vector<int>tati;
int st[maxn],cnt[maxn];
int vec[maxn];
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int n,m;
void read()
{
in>>n>>m;
int x,y;
for(int i=1;i<=n;i++)
{
in>>x;
if(x>0)
a[x].pb(i);
else tati.pb(i);
}
for(int i=1;i<=m;i++)
{
in>>x>>y;
query[x].pb(y);
vec[i]=x;
}
}
void dfs(int nod,int niv)
{
st[niv]=nod;
uz[nod]=1;
for(int i=0;i<query[nod].size();i++)
{
if(niv-query[nod][i]>0) ans[nod].pb(st[niv-query[nod][i]]);
else ans[nod].pb(0);
}
for(int i=0;i<a[nod].size();i++)
if(uz[a[nod][i]]==0)
dfs(a[nod][i],niv+1);
}
int main()
{
read();
for(int i=0;i<tati.size();i++)
dfs(tati[i],1);
for(int i=1;i<=m;i++)
{
int x=vec[i];
out<<ans[x][cnt[x]]<<"\n";
cnt[x]++;
}
}