Pagini recente » Cod sursa (job #2013853) | rusinea_mea | Istoria paginii runda/cls11_oji_2017/clasament | Cod sursa (job #2386768) | Cod sursa (job #870914)
Cod sursa(job #870914)
// Include
#include <fstream>
using namespace std;
// Constante
const int sz = (int)1e5+1;
// Variabile
ifstream in("lca.in");
ofstream out("lca.out");
int nodes, operations;
int father[sz], level[sz];
// Main
int main()
{
in >> nodes >> operations;
level[1] = 1;
for(int i=2 ; i<=nodes ; ++i)
in >> father[i], level[i] = level[father[i]] + 1;
int node1, node2;
while(operations--)
{
in >> node1 >> node2;
while(level[node1] < level[node2])
node2 = father[node2];
while(level[node2] < level[node1])
node1 = father[node1];
while(node1 != node2)
{
node1 = father[node1];
node2 = father[node2];
}
out << node1 << '\n';
}
in.close();
out.close();
return 0;
}