Pagini recente » Cod sursa (job #990102) | Cod sursa (job #2941742) | Cod sursa (job #2514798) | Cod sursa (job #2939607) | Cod sursa (job #959835)
Cod sursa(job #959835)
#include <cstdio>
#include <vector>
#define MAXN 300001
using namespace std;
int i, N, M, Q, P, Head, a, n;
int st[MAXN], Answer[MAXN];
struct nod {int QA, position;}var, now;
vector <int> v[MAXN], start;
vector <nod> p[MAXN];
bool used[MAXN];
inline void DFS(int node) {
st[++Head] = node;
if (p[node].size() != 0) {
for (i = 0; i < p[node].size(); ++i) {
now.position = p[node][i].position;
if (Head - p[node][i].QA <= 0) now.QA = 0;
else
now.QA = st[Head - p[node][i].QA];
Answer[now.position] = now.QA;
}
}
vector <int> :: iterator it, fin;
it = v[node].begin(); fin = v[node].end();
for (; it != fin; ++it)
DFS(*it);
--Head;
}
int main() {
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d", &N, &M);
for (i = 1; i <= N; ++i) {
scanf("%d", &a);
if (a == 0) start.push_back(i);
else
v[a].push_back(i);
}
for (; M > 0; --M) {
scanf("%d%d", &Q, &P);
var.QA = P; var.position = ++n;
p[Q].push_back(var);
}
vector <int> :: iterator f;
for (f = start.begin(); f != start.end(); ++f) {
DFS(*f); break;
}
for (i = 1; i <= n; ++i)
printf("%d\n", Answer[i]);
return 0;
}