Pagini recente » Cod sursa (job #2584456) | Cod sursa (job #2556519) | Cod sursa (job #928031) | Cod sursa (job #267479) | Cod sursa (job #2120981)
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
fstream fin("lca.in",ios::in), fout("lca.out",ios::out);
int t[100100],niv[100100],n,m;
vector<int> v[100100];
void dfs(int nod,int nivel)
{
niv[nod]=nivel;
for(auto x: v[nod])
{
dfs(x,nivel+1);
}
}
int main()
{
int i,a,b;
fin>>n>>m;
for(i=2;i<=n;i++)
{
fin>>t[i];
v[t[i]].push_back(i);
}
dfs(1,1);
for(i=1;i<=m;i++)
{
fin>>a>>b;
while(niv[a]<niv[b]) b=t[b];
while(niv[a]>niv[b]) a=t[a];
while(a!=b)
{
a=t[a];
b=t[b];
}
fout<<a<<"\n";
}
}