Pagini recente » Cod sursa (job #1492741) | Cod sursa (job #2963368) | Cod sursa (job #2829952) | Cod sursa (job #2791755) | Cod sursa (job #1123000)
#include <iostream>
#include <fstream>
#include <vector>
#define INF 0x33ffff
#define endl '\n';
using namespace std;
ifstream d("lca.in");
ofstream o("lca.out");
const int N=1+1e6;
const int M=2e6;
vector<int> a[N];
int n,m,b[2][M],p,nr,cmin,y,poz;
bool ok;
void lca(int j)
{
int q=a[j].size();
for(int i=0; i<q; i++)
{
b[1][++p]=a[j][i];
nr++;
b[2][p]=nr;
lca(a[j][i]);
b[1][++p]=j;
nr--;
b[2][p]=nr;
}
}
int main()
{
int i,x;
d>>n>>m;
for(i=2; i<=n; i++)
{
d>>m;
a[m].push_back(i);
}
b[1][++p]=1;
b[2][p]=nr;
lca(1);
while(d>>x>>y)
{
cmin=INF;
ok=false;
for(i=1; i<=p; i++)
{
if(b[1][i]==x)
ok=true;
if(ok)
if(b[2][i]<cmin)
{
cmin=b[2][i];
poz=b[1][i];
}
if(b[1][i]==y && ok)
i=p+1;
}
o<<poz<<'\n';
}
return 0;
}