Pagini recente » Cod sursa (job #3174836) | Cod sursa (job #2373099) | Cod sursa (job #2576276) | Cod sursa (job #135017) | Cod sursa (job #1464789)
#include <iostream>
#include <fstream>
using namespace std;
fstream in("lca.in", ios::in);
fstream out("lca.out", ios::out);
#define nmax 100001
int n,m,t[nmax],l[nmax];
int lca(int,int);
int main()
{
int i,j;
in>>n>>m;
for(i=2;i<=n;i++)
{
in>>t[i];
l[i]=1+l[t[i]];
}
while(in>>i>>j)
out<<lca(i,j)<<"\n";
in.close();
out.close();
return 0;
}
int lca(int a,int b)
{
while(l[a]!=l[b])
if(l[a]>l[b])
a=t[a];
else
b=t[b];
while(a!=b)
{
a=t[a];
b=t[b];
}
return a;
}