Cod sursa(job #2570194)

Utilizator michael_blazemihai mihai michael_blaze Data 4 martie 2020 15:31:00
Problema Lowest Common Ancestor Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>

std :: ifstream fin ("lca.in");
std :: ofstream fout("lca.out");

int n, m;

int LCA(int parentArray[], int node, int node1, int node2) {
	int commonAncestor = 0;
	if (node == node1)
		return node1;
	if (node == node2)
		return node2;

	for (int i = 2;i <= n;i ++) {
		if (parentArray[i] == node) {	
			commonAncestor += LCA(parentArray, i, node1, node2);

			if (commonAncestor == node1 + node2) {
				commonAncestor = node;
				break;
			}
		}
	}

	return commonAncestor;
}
int main() {
	int* parentArray;
	fin >> n >> m;

	parentArray = new int[n + 1];

	parentArray[1] = -1;

	for (int i = 2;i <= n;i ++) {
		fin >> parentArray[i];
	}

	int x, y;

	for (int i = 1;i <= m;i ++) {
		fin >> x >> y;
		
		fout << LCA(parentArray, 1, x, y) << std :: endl;
	}

	

	fin.close();
	fout.close();
	return 0;
}