Pagini recente » Cod sursa (job #2908773) | Cod sursa (job #6562) | Cod sursa (job #1404608) | Cod sursa (job #506552) | Cod sursa (job #2232560)
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream fin("lca.in");
ofstream fout("lca.out");
int N,M,viz[NMAX],T[NMAX];
void findLCA(int x, int y)
{
for(int i = 1; i <= NMAX; i++)
viz[i]=0;
int rx=x;
int ry=y;
while(T[rx])
{
viz[rx]++;
rx=T[rx];
}
viz[rx]++;
while(T[ry])
{
viz[ry]++;
if(viz[ry]==2)
{
fout<<ry<<" "<<'\n';
break;
}
ry=T[ry];
}
viz[ry]++;
if(viz[ry]==2) fout<<ry<<" "<<'\n';
}
int main()
{
fin>>N>>M;
for(int i = 1; i < N; i++)
{
int x;
fin>>x;
T[i+1]=x;
}
T[1]=0;
while(M--)
{
int p,q;
fin>>p>>q;
findLCA(p,q);
}
return 0;
}