Cod sursa(job #1295039)

Utilizator vgabi94Vaduva Gabriel vgabi94 Data 18 decembrie 2014 18:29:07
Problema Stramosi Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
using namespace std;

// Arbori pe nivele
// Cu programare dinamica

struct Node {
	Node(Node* p, int v) : parent(p), val(v) {}
	Node* parent;
	int val;
};

int findAncestor(Node* node, int p)
{
	if (node == nullptr) {
		return 0;
	}
	else if (p == 0) {
		return node->val;
	}
	else return findAncestor(node->parent, p - 1);
}

int main()
{
	ifstream in("stramosi.in");
	ofstream out("stramosi.out");
	int N, M, Q, P;
	in >> N >> M;

	Node** intToNode = new Node*[N + 1];
	for (int i = 0; i <= N; i++) {
		intToNode[i] = new Node(nullptr, i);
	}

	for (int i = 1; i <= N; i++) {
		int x; in >> x;
		intToNode[i]->parent = intToNode[x];
	}

	for (int i = 0; i < M; i++) {
		in >> Q >> P;
		out << findAncestor(intToNode[Q], P) << '\n';
	}

	for (int i = 0; i <= N; i++) {
		delete intToNode[i];
	}
	delete[] intToNode;
	in.close();
	out.close();
}