Pagini recente » Cod sursa (job #2492099) | Cod sursa (job #979346) | Cod sursa (job #1852386) | Cod sursa (job #1759384) | Cod sursa (job #974609)
Cod sursa(job #974609)
#include <fstream>
#include <list>
#include <vector>
#include <iterator>
#include <algorithm>
#include <iostream>
using namespace std;
ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");
typedef pair <int, int> res;
#define sz (int)(st.size())
vector <vector <res> > q;
vector <list <int> > g;
vector <int> st, t, sol;
int n, m;
void dfs(int x) {
for (vector <res> :: iterator it = q[x].begin(); it != q[x].end(); ++it) {
if (sz >= (*it).first)
sol[(*it).second] = st[sz-(*it).first];
else
sol[(*it).second] = 0;
}
st.push_back(x);
for (list <int> :: iterator it = g[x].begin(); it != g[x].end(); ++it)
dfs(*it);
st.pop_back();
}
int main() {
fin >> n >> m;
g.resize(n+1);
q.resize(n+1);
t.resize(n+1);
sol.resize(m);
for (int i = 1; i <= n; ++i) {
int x;
fin >> x;
g[x].push_back(i);
t[i] = x;
}
for (int i = 0; i < m; ++i) {
int x, y;
fin >> x >> y;
q[x].push_back(res(y, i));
}
fin.close();
for (list <int> :: iterator it = g[0].begin(); it != g[0].end(); ++it)
dfs(*it);
copy (sol.begin(), sol.end(), ostream_iterator <int> (fout, "\n"));
fout.close();
}