Pagini recente » Cod sursa (job #1513730) | Cod sursa (job #2322148) | Rating Ana Uban (ananana) | Cod sursa (job #2047698) | Cod sursa (job #2416938)
#include <bits/stdc++.h>
#define Dim 100009
using namespace std;
ifstream f("lca.in");
ofstream g("lca.out");
int N,M,val,Tata[Dim],Level[Dim],A,B;
bool viz[Dim];
vector <int> V[Dim];
void DFS(int nod,int niv,int prec)
{
Level[nod]=niv;
Tata[nod]=prec;
viz[nod]=1;
for(unsigned int i=0;i<V[nod].size();i++)
{
int vecin=V[nod][i];
if(!viz[vecin])
DFS(vecin,niv+1,nod);
}
}
int main()
{
f>>N>>M;
for(int i=2;i<=N;i++)
{
f>>val;
V[i].push_back(val);
V[val].push_back(i);
}
DFS(1,1,1);
for(int i=1;i<=M;i++)
{
f>>A>>B;
while(Tata[A]!=Tata[B])
if(Level[A]>=Level[B]) A=Tata[A];
else B=Tata[B];
if(A!=B)
g<<Tata[A]<<'\n';
else
g<<A<<'\n';
}
return 0;
}