Cod sursa(job #3240995)

Utilizator divadddDavid Curca divaddd Data 24 august 2024 18:40:33
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 25e4+2;
const int QMAX = 3e5+2;
using pii = pair<int, int>;
int n,q,p[NMAX],ans[QMAX],st[NMAX];
vector<int> v[NMAX];
vector<pii> queries[NMAX];

ifstream fin("stramosi.in");
ofstream fout("stramosi.out");

void dfs(int nod, int tata = 0, int niv = 1){
  st[niv] = nod;
  for(auto [k, idx]: queries[nod]){
    ans[idx] = st[niv - k];
  }
  for(int fiu: v[nod]){
    if(fiu != tata){
      dfs(fiu, nod, niv + 1);
    }
  }
}

int main()
{
  fin >> n >> q;
  for(int i = 1; i <= n; i++){
    fin >> p[i];
    v[i].push_back(p[i]);
    v[p[i]].push_back(i);
  }
  for(int i = 1; i <= q; i++){
    int x, k;
    fin >> x >> k;
    queries[x].push_back({k, i});
  }
  for(int i = 1; i <= n; i++){
    if(p[i] == 0){
      dfs(i);
    }
  }
  for(int i = 1; i <= q; i++){
    fout << ans[i] << "\n";
  }
  return 0;
}