Pagini recente » Cod sursa (job #1884006) | Cod sursa (job #45724) | Cod sursa (job #1971175) | Cod sursa (job #2489255) | Cod sursa (job #424697)
Cod sursa(job #424697)
#include<stdio.h>
#include<vector>
using namespace std;
vector <int> a[100005];
int n,m,i,x,y,nr,k,aux,nivelmin,j,minim,maxim,pozj;
int eul[100005],fa[100005],niv[100005],lg[100005];
void dfs(int nod,int lev){
int i;
eul[++k]=nod;
fa[nod]=k;
niv[k]=lev;
for(i=0;i<a[nod].size();i++){
dfs(a[nod][i],lev+1);
eul[++k]=nod;
niv[k]=lev;
}
}
int main(){
FILE*f=fopen("lca.in","r");
FILE*g=fopen("lca.out","w");
fscanf(f,"%d %d",&n,&m);
for(i=2;i<=n;i++){
fscanf(f,"%d",&x);
a[x].push_back(i);
}
dfs(1,1);
for(i=1;i<=m;i++){
fscanf(f,"%d %d",&x,&y);
if(x>y){
aux=x;
x=y;
y=aux;
}
nivelmin=100010;
for(j=fa[x];j<=fa[y];j++)
if(niv[j]<nivelmin){
nivelmin=niv[j];
pozj=j;
}
fprintf(g,"%d\n",eul[pozj]);
}
fclose(f);
fclose(g);
return 0;}