Pagini recente » Cod sursa (job #588536) | Cod sursa (job #710035) | Cod sursa (job #809359) | Cod sursa (job #2539059) | Cod sursa (job #2287027)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int parinte(int a,vector<int> v,int n)
{
return v[a];
}
int LCA(int a,int b, vector<int> v,int n)
{
int t,s,p,q,min=99999999,k=0;
if(v[a]==v[b])
{
return v[a];
}
else
{
t=a;
k=0;
while(v[t]!=v[b])
{
t=parinte(t,v,n);
k++;
}
if(k<min)
{
min=k;
}
s=b;
k=0;
while(v[s]!=v[a])
{
s=parinte(s,v,n);
k++;
}
if(k<min)
{
min=k;
}
p=a;
q=b;
k=0;
while(v[p]!=v[q])
{
p=parinte(p,v,n);
q=parinte(q,v,n);
k++;
}
if(k<min)
{
min=k;
}
return min;
}
}
int main()
{
ifstream fin("lca.in");
ofstream fout("lca.out");
vector<int> v;
int a,b,n,m,i,nr;
fin>>n>>m;
for(i=2;i<=n;i++)
{
fin>>nr;
v.push_back(nr);
}
for(i=1;i<=m;i++)
{
fin>>a>>b;
fout<<LCA(a,b,v,n)<<endl;
}
fin.close();
fout.close();
return 0;
}