Cod sursa(job #2651559)
| Utilizator | Data | 22 septembrie 2020 22:22:32 | |
|---|---|---|---|
| Problema | Lowest Common Ancestor | Scor | 30 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva educationala | Marime | 0.48 kb |
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin("lca.in");
ofstream cout("lca.out");
int n,m,t[100000],l[100000];
int dfs(int nod,int lev){
l[nod]=lev;
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);
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;
}
