Pagini recente » Rating rusu radu (RusuRadu) | Diferente pentru home intre reviziile 586 si 587 | Cod sursa (job #2045259) | Cod sursa (job #2835314) | Cod sursa (job #2278085)
#include <fstream>
std::ifstream cin("lca.in");
std::ofstream cout("lca.out");
#define maxn 100005
using namespace std;
int n,m, t[maxn],lev[maxn];
int dfs(int nod, int lv){
lev[nod]=lv;
for(int i=1;i<=n;i++)
if(t[i]==nod)
dfs(i,lv+1);
}
int main()
{
int x,y;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>t[i];
dfs(1,0);
for(;m--;){
cin>>x>>y;
while(x!=y){
if(lev[x]>lev[y])
x=t[x];
else
y=t[y];
}
cout<<x<<'\n';
}
}