Pagini recente » Cod sursa (job #5172) | Cod sursa (job #3209092) | Cod sursa (job #2318493) | Cod sursa (job #3285534) | Cod sursa (job #412989)
Cod sursa(job #412989)
#include<fstream.h>
#define endl '\n'
ifstream fin("lca.in");
ofstream fout("lca.out");
int n,vt[100001],p[100001],m,a[100001],b[100001];
int drum1(int x,int y){
if(x==y)
return 1;
if(vt[x]==0) return 0;
a[0]++;
a[a[0]]=vt[x];
return drum1 (vt[x],y);
}
int drum2(int x,int y){
if(x==y)
return 1;
if(vt[x]==0) return 0;
b[0]++;
b[b[0]]=vt[x];
return drum2 (vt[x],y);
}
int main(){
int i,j,isp,s,d;
fin>>n>>m;
for(i=2;i<=n;i++){
fin>>vt[i];
p[vt[i]]=1;
}
while(m--){
fin>>s>>d;
a[0]=0;
isp=drum1(s,d);
if(isp) fout<<d<<endl;
else {
b[0]=0;
isp=drum2(d,s);
if(isp)
fout<<s<<endl;
else{
i=a[0];
j=b[0];
while(a[i]==b[j]&&i&&j){
i--;
j--;
}
i++;
fout<<a[i]<<endl;
}
}
}
return 0;
}