Pagini recente » Cod sursa (job #2523082) | Cod sursa (job #1141327) | Cod sursa (job #3319524) | Cod sursa (job #2383491) | Cod sursa (job #2714665)
#include <cstdio>
using namespace std;
FILE *f=fopen("lca.in","r");
FILE *g=fopen("lca.out","w");
long n,nrp;
long tati[100001];
void read()
{
fscanf(f,"%ld%ld",&n,&nrp);
for(long i=2;i<=n;i++)
{
fscanf(f,"%ld",&tati[i]);
}
}
long FindLca(int x,int y)
{
while(tati[x]!=tati[y])
{
if(tati[x]==y)return y;
if(tati[y]==x)return x;
if(x==1||y==1)return 1;
x=tati[x];
y=tati[y];
}
return tati[x];
}
int main()
{
read();
for(int i=1;i<=nrp;i++)
{
int x,y;fscanf(f,"%d%d",&x,&y);
fprintf(g,"%d\n",FindLca(x,y));
}
fclose(f);
fclose(g);
return 0;
}