Pagini recente » Cod sursa (job #1241318) | Cod sursa (job #2418058) | Cod sursa (job #2257445) | Cod sursa (job #1151846) | Cod sursa (job #801564)
Cod sursa(job #801564)
#include <fstream>
#include<vector>
#include<stack>
#define Nmax 250005
#define Mmax 300005
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int n,m;
vector<int> a[Nmax];
vector <pair<int,int> >b[Nmax];
int s[Nmax],r[Mmax];
void cit()
{
f>>n>>m;
for(int i=1;i<=n;i++)
{
int x;
f>>x;
a[x].push_back(i);
}
for(int i=1;i<=m;i++)
{
int q,p;
f>>q>>p;
b[q].push_back(make_pair(p,i));
}
}
void solve(int x,int niv)
{
vector<pair<int,int> >::iterator i;
for(i=b[x].begin();i!=b[x].end();i++)
{
pair<int,int> y= *i;
if(niv-y.first>=0)
r[y.second]=s[niv-y.first];
else
r[y.second]=0;
}
}
void dfs(int x,int niv)
{
s[niv]=x;
solve(x,niv);
vector<int>::iterator i;
for(i=a[x].begin();i!=a[x].end();i++)
dfs(*i,niv+1);
}
void afis()
{
for(int i=1;i<=m;i++)
g<<r[i]<<'\n';
}
int main()
{
cit();
vector<int>::iterator i;
for(i=a[0].begin();i!=a[0].end();i++)
dfs(*i,0);
afis();
return 0;
}