Pagini recente » Cod sursa (job #934337) | Cod sursa (job #298994) | Cod sursa (job #3242765) | Cod sursa (job #3294425) | Cod sursa (job #1547177)
#include <stdio.h>
#include <stdlib.h>
int v[100001];
int a[100001];
void adinc(int noduri){
if(a[noduri]==0){
adinc(v[noduri]);
a[noduri]=a[v[noduri]]+1;
}
}
int main()
{
int n, m, i;
int u, w, f;
FILE*fin=fopen("lca.in","r"), *fout=fopen("lca.out","w");
fscanf(fin,"%d%d", &n, &m);
f=1;
for(i=2;i<=n;i++){
fscanf(fin,"%d", &v[i]);
if(v[i]!=i-1)
f=0;
}
a[1]=1;
for(i=2;i<=n;i++)
adinc(i);
if(f!=1)
for(i=0;i<m;i++){
fscanf(fin,"%d%d", &u, &w);
while(a[u]<a[w])
w=v[w];
while(a[w]<a[u])
u=v[u];
while(u!=w){
u=v[u];
w=v[w];
}
fprintf(fout,"%d\n", u);
}
else
for(i=0;i<m;i++){
fscanf(fin,"%d%d", &u, &w);
if(u<=w)
fprintf(fout,"%d\n", u);
else
fprintf(fout,"%d\n", w);
}
fclose(fin);
fclose(fout);
return 0;
}