Pagini recente » Cod sursa (job #443221) | Cod sursa (job #447825) | Cod sursa (job #2727854) | Cod sursa (job #2975173) | Cod sursa (job #584454)
Cod sursa(job #584454)
#include<stdio.h>
using namespace std;
int n,i,x,y,m,tata[100005],mark[100005],a1,a2,b1,b2,ok;
int main()
{
FILE *f=fopen("lca.in","r"), *g=fopen("lca.out","w");
fscanf(f,"%d %d",&n,&m);
for(i=2;i<=n;i++)
fscanf(f,"%d",&tata[i]);
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d",&x,&y);
//urc in nivel pentru x SI y
b1=x;
if(b1!=1)
a1=tata[b1];
b2=y;
if(b2!=1)
a2=tata[b2];
mark[b1]=i;
if(mark[b2]==i)
{fprintf(g,"%d\n",b2); continue;}
else mark[b2]=i;
ok=1;
while(ok)
{
if(mark[a1] == i)
{fprintf(g,"%d\n",a1); break;}
else
{
if(a1!=1)
mark[a1] = i;
if(mark[a2] == i)
{fprintf(g,"%d\n",a2); break;}
else if(a2!=1)
mark[a2]=i;
}
b1=a1;
if(a1!=1)
a1=tata[b1];
b2=a2;
if(a2!=1)
a2=tata[b2];
if(a1==a2 && a1==1)
{fprintf(g,"1\n"); break;}
}
}
fclose(f);
fclose(g);
return 0;
}