Cod sursa(job #870914)

Utilizator fhandreiAndrei Hareza fhandrei Data 4 februarie 2013 08:39:50
Problema Lowest Common Ancestor Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
// 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;
}