Pagini recente » Cod sursa (job #1368688) | Cod sursa (job #1418144) | Cod sursa (job #1919407) | Cod sursa (job #2944541) | Cod sursa (job #2217657)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 100001
FILE *f, *g;
int TT[MAXN], VIZ[MAXN];
int n, m, i;
void citire()
{
fscanf (f, "%d %d", &n, &m);
TT[1] = 1;
for (i = 2; i <= n; ++i)
fscanf (f, "%d", &TT[i]);
}
void solve(int x, int y)
{
int j;
for (j = 1; j <= n; ++j)
VIZ[j] = 0;
if (TT[x] == y)
{
fprintf (g, "%d\n", TT[x]);
return;
}
else if (TT[y] == x)
{
fprintf (g, "%d\n", TT[y]);
return;
}
while (x != 1)
{
VIZ[TT[x]] = 1;
x = TT[x];
}
while (1)
{
if (VIZ[TT[y]] == 1)
{
fprintf (g, "%d\n", TT[y]);
break;
}
else
{
y = TT[y];
}
}
}
int main()
{
f = fopen ("lca.in", "r");
g = fopen ("lca.out", "w");
citire ();
for (i = 0; i < m; ++i)
{
int x, y;
fscanf (f, "%d %d", &x, &y);
solve (x, y);
}
fclose (f);
return 0;
}