Pagini recente » Cod sursa (job #651300) | Cod sursa (job #1397204) | Cod sursa (job #1665822) | Cod sursa (job #1919177) | Cod sursa (job #731322)
Cod sursa(job #731322)
#include<fstream>
#include<vector>
#include<stack>
#define lim 250007
#define lim1 300007
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
vector< pair < int,int > > V[lim];
vector<int>G[lim];
int sol[lim1],dim,now,idx,j,x,y,n,m,i;
bool viz[lim];
vector<int>s;
int main (){
f>>n>>m;
for(i=1;i<=n;i++){
f>>x;
G[x].push_back(i);
}
for(i=1;i<=m;i++){
f>>x>>y;
V[x].push_back(make_pair(i,y));
}
stack<int>Q;
Q.push(0);
while(!Q.empty() ){
now=Q.top();
if(viz[now]==1 ){
Q.pop();
s.pop_back();
}
else {
viz[now]=1;
s.push_back(now);
for(int i=0;i<G[now].size();++i)
Q.push(G[now][i]);
for(int i=0;i<V[now].size();++i ){
idx=V[now][i].first;
j=V[now][i].second;
dim=s.size()-1;
if( dim<j)
sol[idx]=0;
else
sol[idx]=s[dim-j];
}
}
}
for(i=1;i<=m;i++)
g<<sol[i]<<"\n";
return 0;
}