Cod sursa(job #1268692)

Utilizator TeodorPPaius Teodor TeodorP Data 21 noiembrie 2014 12:07:58
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream is("maimute.in");
ofstream os("maimute.out");

vector<int> t;
vector<int> salt;
vector<int> dist;
int n;
int aux1, aux2;

int Jump(int x);

int main()
{
    is >> n;
    t.resize(n+1);
    dist.resize(n+1);
    for(int i = 1; i <= n; ++i)
    {
        is >> aux1;
        salt.push_back(aux1);
    }
    for(int i = 1; i <= n - 1; ++i)
    {
        is >> aux1;
        is >> aux2;
        t[aux2] = aux1;
    }
    for(int i = 1; i <= n; ++i)
    {
        dist[i] = Jump(i);
        os << dist[i] << ' ';
    }
    is.close();
    os.close();
    return 0;
}

int Jump(int x)
{
    if(dist[x] != 0)
        return dist[x];
    int cnt = salt[x-1];
    if(cnt == 0)
        return 0;
    while(cnt >= 1)
    {
        x = t[x];
        cnt--;
    }
    return Jump(x) + 1;
}