Pagini recente » Cod sursa (job #2109540) | Cod sursa (job #2001449) | Cod sursa (job #1132356) | Cod sursa (job #2280798) | Cod sursa (job #1880558)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin ("lca.in");
ofstream cout("lca.out");
vector <int> a;
int m,x,y;
void read()
{
int n;
cin >> n >> m; // n - numarul de noduri
a.resize(n+1);
for (int i=2; i<a.size(); i++)
{
cin >> n; //stramosul nodului i
a[i]=n;
}
}
void lca()
{
vector <int> q(1),w(1);
q[0]=x,w[0]=y;
for (int i=a[x]; i!=1; )
q.push_back(i),i=a[i];
for (int i=a[y]; i!=1; )
w.push_back(i),i=a[i];
if (q.size()<w.size())
{
for (int i=0; i<q.size(); i++)
if (binary_search(w.rbegin(),w.rend(),q[i]))
{
cout << q[i] << '\n';
return;
}
}
else
{
for (int i=0; i<w.size(); i++)
if (binary_search(q.rbegin(),q.rend(),w[i]))
{
cout << w[i] << '\n';
return;
}
}
cout << "1\n";
}
main()
{
read();
for (int i=0; i<m; i++)
{
cin >> x >> y;
lca();
}
}