Cod sursa(job #2548388)

Utilizator sichetpaulSichet Paul sichetpaul Data 16 februarie 2020 16:36:21
Problema Stramosi Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <bits/stdc++.h>
#define Nmax 300005
using namespace std;

ifstream f("stramosi.in");
ofstream g("stramosi.out");

int N, M, len;
vector<int> G[Nmax];
int t[Nmax], nr[Nmax], st[Nmax], q[Nmax], ans[Nmax];

void DFS(int node) {
    st[++len] = node;
    int pos = q[node];
    ans[pos] = st[len - nr[pos]];

    for (auto it: G[node])
        DFS(it);
    --len;
}
int main()
{
    f >> N >> M;
    for (int i = 1; i <= N; ++i) {
        f >> t[i];
        if (t[i]) G[t[i]].push_back(i);
    }
    for (int i = 1; i <= M; ++i) {
        int x, y;
        f >> x >> y;
        q[x] = i, nr[i] = y;
    }

    for (int i = 1; i <= N; ++i)
        if (t[i] == 0) DFS(i);

    for (int i = 1; i <= M; ++i)
        g << ans[i] << '\n';

    return 0;
}