Cod sursa(job #3363842)

Utilizator medeeavasile56@gmail.comVasile Medeea [email protected] Data 24 august 2026 11:03:04
Problema Stramosi Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
vector<vector<int>>graph;
vector<vector<pair<int,int>>> query;
vector<bool> visited;
vector<int> path,sol;
void dfs(int node)
{
    if(!visited[node]) visited[node]=true;
    path.push_back(node);
    for(auto vec:query[node])
    {
        int idx=path.size()-1-vec.first;
        if(idx>=0) sol[vec.second]=path[idx];
    }
    for(int neighbor:graph[node])
        if(!visited[neighbor]) dfs(neighbor);
    path.pop_back();
}
int main()
{
    int n,m; cin>>n>>m;
    graph.resize(n+1,vector<int>());
    visited.resize(n+1,false);
    sol.resize(m+1,0); query.resize(n+1);
    for(int i=1;i<=n;i++){
        int x; cin>>x;
        if(x==0) continue;
        graph[i].push_back(x);
        graph[x].push_back(i);
    }
    for(int i=1;i<=m;i++){
        int q,p; cin>>q>>p;
        query[q].push_back({p,i});
    }
    for(int i=1;i<=n;i++){
        if(!visited[i]) dfs(i);
    }
    for(int i=1;i<=m;i++) cout<<sol[i]<<'\n';
    return 0;
}