Pagini recente » Cod sursa (job #3228391) | Cod sursa (job #3228808) | Cod sursa (job #2820886) | Cod sursa (job #1662381) | Cod sursa (job #900049)
Cod sursa(job #900049)
#include <cstdio>
#define NMAX 100001
using namespace std;
int father[NMAX];
int n,m;
int root(int nod,int stramos){
if(nod == stramos)
return 1;
else if(father[nod])
root(father[nod],stramos);
}
int LCA(int a,int b){
if(a == b)
printf("%d\n",a);
else if(root(a,b))
printf("%d\n",b);
else if(root(b,a))
printf("%d\n",a);
else LCA(father[a],father[b]);
}
void citesc(){
int x,y;
freopen("lca.in","r",stdin);
freopen("lca.out","w",stdout);
scanf("%d%d",&n,&m);
for(register int i=2;i<=n;++i)
scanf("%d",&father[i]);
for(register int i=1;i<=m;++i){
scanf("%d%d",&x,&y);
LCA(x,y);
}
}
int main(){
citesc();
return 0;
}