Pagini recente » Cod sursa (job #696590) | Monitorul de evaluare | Cod sursa (job #1202297) | Cod sursa (job #105340) | Cod sursa (job #2651556)
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin("lca.in");
ofstream cout("lca.out");
int n,m,t[100000],l[100000];
dfs(int nod,int lev){
l[nod]=lev;
cout <<nod<<" "<<lev<<"\n";
for(int i=1;i<=n;i++)
if(t[i] == nod)
dfs(i,lev+1);
}
int main(){
cin >>n>>m;
for(int i=1;i<n;i++)cin >>t[i+1];
dfs(1,0);
cout <<"\n";
for(int i=1;i<=m;i++){
int x,y;
cin >>x>>y;
while(x != y){
if(l[x]>l[y])
x=t[x];
else
y=t[y];
}
cout <<x<<"\n";
}
return 0;
}