Cod sursa(job #3137235)

Utilizator SerbanCaroleSerban Carole SerbanCarole Data 11 iunie 2023 19:47:12
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define eb emplace_back
using namespace std;
using pii = pair<int,int>;
const int MAX = 25e4+1;
const int qmax = 3e5+1;

ifstream cin("stramosi.in");
ofstream cout("stramosi.out");

int r , n , m , x , y , rez[qmax] , path[MAX] , k;
vector <int> g[MAX];
vector <pii> q[MAX];
vector <int> roots;

void dfs( int x ){

    path[++k] = x;

    for(auto it : q[x]){

        if(it.first >= k){

            rez[it.second] = 0;

        }else rez[it.second] = path[k-it.first];
    }

    for(auto it : g[x]){

        dfs(it);
    }

    k--;
}

signed main()
{

    cin >> n >> m;

    for(int i = 1 ; i <= n ; i++){

        cin >> x;

        if(!x) roots.eb(i);
        else g[x].eb(i);
    }

    for(int i = 1 ; i <= m ; i++){

        cin >> x >> y;
        q[x].eb(make_pair(y,i));
    }

    for(auto it : roots){

        dfs(it);
    }

    for(int i = 1 ; i <= m ; i++){

        cout << rez[i] << '\n';
    }

    return 0;
}