Pagini recente » Cod sursa (job #806085) | Cod sursa (job #2338253) | Cod sursa (job #1038178) | Cod sursa (job #2593606) | Cod sursa (job #2565458)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
int n, m, i, j, t[100010], niv[100010], x, y;
vector <int> a[100010];
void dfs(int nod){
for(int i=0; i<a[nod].size(); i++){
int vecin=a[nod][i];
niv[vecin]=1+niv[nod];
dfs(vecin);
}
}
int main(){
fin>>n>>m;
for(i=2; i<=n; i++){
fin>>x;
t[i]=x;
a[x].push_back(i);
}
dfs(1);
for(i=1; i<=m; i++){
fin>>x>>y;
while(x!=y){
if(niv[x]>niv[y]){
x=t[x];
}else{
if(niv[x]<niv[y]){
y=t[y];
}else{
while(x!=y){
x=t[x];
y=t[y];
}
}
}
}
fout<<x<<"\n";
}
}