Pagini recente » Cod sursa (job #333083) | Cod sursa (job #1226648) | Cod sursa (job #2446916) | Cod sursa (job #2173260) | Cod sursa (job #2740654)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int n, m;
vector<int> a[250001];
deque<int> stramosi[250001];
int t[250001];
void dfs(int x, int px) {
if (px == 0) {
stramosi[x].push_front(0);
}
else {
stramosi[x] = stramosi[px];
stramosi[x].push_front(px);
}
int i;
for (i = 0; i < a[x].size(); i++) {
if (px == a[x][i]) continue;
dfs(a[x][i], x);
}
}
void solve() {
int i, x, Q, P;
ifstream f("stramosi.in");
f >> n >> m;
for (i = 1; i <= n; i++) {
f >> x;
a[x].emplace_back(i);
a[i].emplace_back(x);
t[i] = x;
}
for (i = 1; i <= n; i++)
if (t[i] == 0)
dfs(i, 0);
ofstream g("stramosi.out");
for (i = 1; i <= m; i++) {
f >> Q >> P;
if (stramosi[Q].size() >= P)
g << stramosi[Q].at(P - 1) << '\n';
else g << 0 << '\n';
}
g.close();
}
int main() {
solve();
return 0;
}