Pagini recente » Cod sursa (job #783335) | Cod sursa (job #2789143) | Cod sursa (job #2883687) | Cod sursa (job #3252663) | Cod sursa (job #2217663)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100005
FILE *f, *g;
int TT[MAXN], LVL[MAXN];
int n, m;
void citire()
{
fscanf (f, "%d %d", &n, &m);
int i;
for (i = 2; i <= n; ++i)
fscanf (f, "%d", &TT[i]);
}
void dfs (int nod, int nivel)
{
LVL[nod] = nivel;
int i;
for (i = 2; i <= n; ++i)
if (TT[i] == nod)
dfs (i, nivel + 1);
}
int main()
{
f = fopen ("lca.in", "r");
g = fopen ("lca.out", "w");
citire ();
dfs (1, 1);
int i;
for (i = 0; i < m; ++i)
{
int x, y;
fscanf (f, "%d %d", &x, &y);
while (x != y)
{
if (LVL[x] > LVL[y])
x = TT[x];
else
y = TT[y];
}
fprintf (g, "%d\n", x);
}
fclose (f);
fclose (g);
return 0;
}