Pagini recente » Cod sursa (job #2615369) | Cod sursa (job #2326715) | Cod sursa (job #1010655) | Cod sursa (job #2204316) | Cod sursa (job #2660799)
#include <bits/stdc++.h>
using namespace std;
ifstream in("lca.in");
ofstream out("lca.out");
int nivel[100005],v[100005];
int n,m;
void dfs(int nod,int lvl)
{
nivel[nod]=lvl;
for(int i=1;i<=n;i++)
if(v[i]==nod)
dfs(i,lvl+1);
}
int main()
{
int n,m;
in>>n>>m;
for(int i=2;i<=n;i++)
in>>v[i];
dfs(1,0);
for(int i=1;i<=m;i++)
{
int x,y;
in>>x>>y;
while(x!=y)
{
if(nivel[x]>nivel[y])
x=v[x];
else
y=v[y];
}
out<<y<<"\n";
}
return 0;
}