Cod sursa(job #1535958)

Utilizator FairPlay94George Cioroiu FairPlay94 Data 25 noiembrie 2015 14:27:44
Problema Cerere Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#include <iostream>
#include <set>
#include <climits>
#include <map>
#include <algorithm>
#include <list>
#include <vector>
#include <utility>
#include <cstdlib>

using namespace std;

int par[100005], rez[100005], v[100005];
bool viz[100005];

int f(int i) {
    if (v[i] == 0) {
        return 1 + rez[i];
    }
    int next = 1;
    while (v[i] > 0) {
        next = par[next];
        v[i]--;
    }
    rez[i] = f(next);
    return rez[i];
}

int main() {
   // freopen("tt.txt", "r", stdin);
    freopen("cerere.in", "r", stdin);
    freopen("cerere.out", "w", stdout);

    ios::sync_with_stdio(false);
    cin.tie(0);

    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> v[i];
    }
    for (int i = 1; i < n; i++) {
        int a, b;
        cin >> a >> b;
        par[b] = a;
    }
    for (int i = 1; i <= n; i++) {
        f(i);
        cout << rez[i] << " ";
    }

    return 0;
}