Pagini recente » Cod sursa (job #1638045) | Cod sursa (job #1876771) | Cod sursa (job #783902) | Cod sursa (job #1390289) | Cod sursa (job #871140)
Cod sursa(job #871140)
#include<stdio.h>
#include<vector>
using namespace std;
FILE*in=fopen("lca.in","r");
FILE*out=fopen("lca.out","w");
int tata[100001],nivel[100001],noduri,query;
int main()
{
fscanf(in,"%d%d",&noduri,&query);
for(int i=2;i<=noduri;++i)
{
fscanf(in,"%d",&tata[i]);
nivel[i]=nivel[tata[i]]+1;
}
for(int i=0;i<query;++i)
{
int nod1,nod2;
fscanf(in,"%d%d",&nod1,&nod2);
if(nivel[nod1]>nivel[nod2])
{
while(nivel[nod2]!=nivel[nod1])
nod1=tata[nod1];
if(nod1==nod2)
fprintf(out,"%d\n",nod1);
else
{
while(tata[nod1]!=tata[nod2])
{
nod2=tata[nod2];
nod1=tata[nod1];
}
fprintf(out,"%d\n",tata[nod1]);
}
}
else
{
while(nivel[nod2]!=nivel[nod1])
nod2=tata[nod2];
if(nod1==nod2)
fprintf(out,"%d\n",nod1);
else
{
while(tata[nod1]!=tata[nod2])
{
nod2=tata[nod2];
nod1=tata[nod1];
}
fprintf(out,"%d\n",tata[nod1]);
}
}
}
fclose(in);
fclose(out);
}