Pagini recente » Cod sursa (job #1557504) | Cod sursa (job #3144784) | Cod sursa (job #1619396) | Cod sursa (job #1262340) | Cod sursa (job #979170)
Cod sursa(job #979170)
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<stack>
#define x first
#define y second
#define NMAX 250007
#define MMAX 300007
using namespace std;
vector <int> v[NMAX];
vector <pair<int, int> > B[NMAX];
int n, m, a[NMAX], sol[MMAX], Stack[NMAX];
inline void dfs(int u){
Stack[++ Stack[0]] = u;
for(int i = 0; i < B[u].size(); ++ i)
if(B[u][i].x >= Stack[0])
sol[B[u][i].y] = 0;
else
sol[B[u][i].y] = Stack[Stack[0] - B[u][i].x];
for(int i = 0; i < v[u].size(); ++ i)
dfs(v[u][i]);
-- Stack[0];
}
int main(){
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%d %d", &n, &m);
for(int i = 1; i <= n; ++ i){
scanf("%d", &a[i]);
v[a[i]].push_back(i);
}
for(int i = 1; i <= m; ++ i){
int aa = 0, bb = 0;
scanf("%d %d", &aa, &bb);
B[aa].push_back(make_pair(bb, i));
}
for(int i = 1; i <= n; ++ i)
if(!a[i])
dfs(i);
for(int i = 1; i <= m; ++ i)
printf("%d\n", sol[i]);
return 0;
}