Pagini recente » Cod sursa (job #3299257) | Cod sursa (job #2748371) | Cod sursa (job #2615227) | Cod sursa (job #3283822) | Cod sursa (job #2122630)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int maxNodes {3e4+5};
vector <int> edges[maxNodes];
int totalNodes, totalQueries;
vector <int> ancenstors[maxNodes];
inline void readVariables(){
fin >> totalNodes >> totalQueries;
int source;
for ( int index = 1; index <= totalNodes; index++ ){
fin >> source;
edges[source].push_back(index);
}
}
inline void breadhFirstSearch(int startNode = 0){
queue <int> myQueue;
myQueue.push(startNode);
int currentNode;
for ( ; myQueue.size(); myQueue.pop()){
currentNode = myQueue.front();
for ( auto nextNode : edges[currentNode]){
ancenstors[nextNode].push_back(currentNode);
for ( auto source : ancenstors[currentNode]){
ancenstors[nextNode].push_back(source);
}
myQueue.push(nextNode);
}
}
}
inline void displayAnswers(){
int node, grade;
for ( ; totalQueries; totalQueries-- ){
fin >> node >> grade;
if ( grade > ancenstors[node].size() )
fout << "0" << "\n";
else
fout << ancenstors[node][grade-1] << "\n";
}
}
int main(){
readVariables();
breadhFirstSearch();
displayAnswers();
return 0;
}