Mai intai trebuie sa te autentifici.

Cod sursa(job #1680945)

Utilizator DragosDADDorneanu Dragos - Andrei DragosDAD Data 9 aprilie 2016 10:46:42
Problema Stramosi Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

unsigned int *elders;

bool find(unsigned int *a, unsigned int n, unsigned int x)
{
	for (unsigned int i = 0; i < n; ++i) {
		if (a[i] == x) {
			return true;
		}
	}
	return false;
}

unsigned int findAncestor(unsigned int *v, unsigned int n, unsigned int current_member, unsigned int rank, unsigned int count)
{
	if (count == rank) {
		return current_member;
	}
	if (!find(elders, n, current_member)) {
		return findAncestor(v, n, v[current_member], rank, count + 1);
	}
	return 0;
}

int main()
{
	ifstream fin("stramosi.in");
	ofstream fout("stramosi.out");
	unsigned int n, m, i, p, q, dim = 0;
	fin >> n >> m;
	unsigned int *v = new unsigned int[n + 1];
	elders = new unsigned int[n + 1];
	for (i = 1; i <= n; i++){
		fin >> v[i];
		if (v[i] == 0) {
			elders[dim++] = i;
		}
	}
	while (m)
	{
		fin >> q >> p;
		if (find(elders, dim, q)) {
			fout << 0 << '\n';
		}
		else {
			fout << findAncestor(v, n, v[q], p, 1) << '\n';
		}
		m--;
	}
	fin.close();
	fout.close();
	return 0;
}