Pagini recente » Cod sursa (job #3175525) | Cod sursa (job #1008122) | Cod sursa (job #616678) | Cod sursa (job #2313637) | Cod sursa (job #368348)
Cod sursa(job #368348)
#include <cstdio>
#define MAX_N 1005
int N, M, T[MAX_N], Niv[MAX_N];
char Tt[MAX_N][MAX_N];
void dfs(int nod, int niv)
{
Niv[nod] = niv;
for(int i = 1; i <= N; ++i)
if(T[i] == nod)
dfs(i, niv+1);
}
int main()
{
freopen("lca.in","rt",stdin);
freopen("lca.out","wt",stdout);
scanf("%d %d\n", &N, &M);
for(int i = 2; i <= N; ++i)
scanf("%d ",T+i);
for(int i = 1; i <= N; ++i)
for(int j = i; j; j = T[j])
Tt[i][j] = 1;
dfs(1, 0);
for(int i = 1; i <= M; ++i)
{
int x, y;
scanf("%d %d\n",&x, &y);
int nod = 0, hmax = 0;
for(int j = 1; j <= N; ++j)
if(Tt[x][j] && Tt[y][j])
if(Niv[j] >= hmax)
nod = j,
hmax = Niv[j];
printf("%d\n", nod);
}
}