Pagini recente » Cod sursa (job #514957) | Cod sursa (job #2292728) | Cod sursa (job #368019) | Cod sursa (job #2234183) | Cod sursa (job #2486187)
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
int n, m, tt[100000], level[100000];
vector<int>G[100005];
void levell(){
for(int i = 1; i <= n; i++){
int nod = i;
while(nod != 1){
nod = tt[nod];
level[i]++;
}
}
}
void lca(){
int x, y;
fin>>n>>m;
for(int i = 2; i <= n; i++){
fin>>tt[i];
G[tt[i]].push_back(i);
}
levell();
for(int i = 1; i <= m; i++){
fin>>x>>y;
if(level[x] < level[y])
swap(x, y);
while(level[x] != level[y])
x = tt[x];
while(x != y){
x = tt[x];
y = tt[y];
}
fout<<x<<endl;
}
}
int main(){
lca();
return 0;
}