Pagini recente » Cod sursa (job #2748309) | Cod sursa (job #1217220) | Cod sursa (job #646660) | Cod sursa (job #2146696) | Cod sursa (job #1734774)
#include <bits/stdc++.h>
#define MAX 100001
using namespace std;
void DFS (int node, int level);
unsigned int n, m;
unsigned int father[MAX];
unsigned int u, v;
unsigned int lev[MAX];
unsigned int i;
int main ()
{
ifstream fin ("lca.in");
fin >> n >> m;
for(i=2; i<=n; i++)
fin >> father[i];
DFS (1,0);
ofstream fout ("lca.out");
for (i=1; i<=m; i++)
{
fin >> u >> v;
while (u != v)
if (lev[u] > lev[v])
u = father[u];
else
v = father[v];
fout << u << '\n';
}
fin.close();
fout.close();
return 0;
}
void DFS (int node, int level)
{
unsigned int i;
lev[node] = level;
for (i=1; i<=n; i++)
if (father[i] == node)
DFS(i,level+1);
}