Pagini recente » Cod sursa (job #2383257) | Cod sursa (job #1197801) | Cod sursa (job #1759230) | Cod sursa (job #2062481) | Cod sursa (job #2232811)
#include <iostream>
#include <fstream>
#define NMAX 10001
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
int N,M,t[NMAX],Lev[NMAX];
void DFs(int node, int level)
{
Lev[node]=level;
for(int i = 1; i <= N; i++)
if(t[i]==node)
DFs(i,level+1);
}
int main()
{
fin>>N>>M;
for(int i = 2; i <= N; i++)
{
fin>>t[i];
}
DFs(1,0);
for(int i = 1; i <= M; i++)
{
int x,y;
fin>>x>>y;
while(x!=y)
{
if(Lev[x] > Lev[y])
x=t[x];
else y=t[y];
}
fout<<x<<'\n';
}
return 0;
}