Pagini recente » Cod sursa (job #8318) | Cod sursa (job #2711733) | Atasamentele paginii gluma_de_1_aprilie | Cod sursa (job #290350) | Cod sursa (job #3301712)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
vector<vector<int>>rmq,tabel;
vector<int>pr,niv;
void dfs(int nod,int pr){
for(auto i : tabel[nod]){
if(i==pr)
continue;
rmq[i][0] = nod;
dfs(i,nod);
}
}
void build(int n){
for(int i=1;i<=17;i++){
for(int j=1;j<=n;j++){
rmq[j][i] = rmq[rmq[j][i-1]][i-1];
}
}
}
void qeu(int nod,int p){
for(int i=17;i>=0;i--){
if((p & (1 << i)))
nod = rmq[nod][i];
}
fout<<nod<<'\n';
}
int main()
{
int n,m;
fin>>n>>m;
rmq.resize(n+1,vector<int>(18));
int root=0;
for(int i=1;i<=n;i++){
int tata;
fin>>tata;
rmq[i][0] = tata;
}
rmq[0][0] = 0;
build(n);
while(m--){
int q,p;
fin>>q>>p;
qeu(q,p);
}
return 0;
}