Pagini recente » Cod sursa (job #3308934) | Cod sursa (job #281060) | Cod sursa (job #938825) | Cod sursa (job #2717032) | Cod sursa (job #3308688)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("lca.in");
ofstream fout ("lca.out");
int tata[100005];
int lvl[100005];
int main()
{
ios::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
int n,m;
fin >> n >> m;
lvl[1] = 1;
tata[1] = 1;
for (int i=2;i<=n;++i){
fin >> tata[i];
lvl[i] = lvl[tata[i]]+1;
}
while (m--){
int x,y;
fin >> x >> y;
while (lvl[x]>lvl[y]){
x = tata[x];
}
while (lvl[y]>lvl[x]){
y = tata[y];
}
while (x!=y){
x = tata[x];
y = tata[y];
}
fout << x << '\n';
}
return 0;
}