Pagini recente » Cod sursa (job #1733716) | Cod sursa (job #1438133) | Cod sursa (job #2647256) | Cod sursa (job #2784208) | Cod sursa (job #1184689)
#include<fstream>
#include<bitset>
#include<vector>
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
const int Nmax=100005;
int n,m,a[Nmax],x,y,nivel[Nmax];
vector<int>v[Nmax];
inline void Citire()
{
int i;
fin>>n>>m;
for (i=2;i<=n;i++)
{
fin>>a[i];
v[a[i]].push_back(i);
}
}
inline void DFS(int x,int niv)
{
int i,len;
nivel[x]=niv;
len=v[x].size();
for (i=0;i<len;i++)
DFS(v[x][i],niv+1);
}
inline void Rezolva()
{
int i;
while (m--)
{
fin>>x>>y;
while (nivel[x]>nivel[y])
x=a[x];
while (nivel[y]>nivel[x])
y=a[y];
while (x!=y)
{
x=a[x];
y=a[y];
}
fout<<x<<"\n";
}
}
int main()
{
Citire();
DFS(1,1);
Rezolva();
return 0;
}