Mai intai trebuie sa te autentifici.
Cod sursa(job #1680945)
Utilizator | 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;
}