Cod sursa(job #2649604)

Utilizator DenisONIcBanu Denis Andrei DenisONIc Data 15 septembrie 2020 14:10:49
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;

#define NMAX 100005

int n,k[NMAX],ans[NMAX], IN[NMAX];

vector<int> v[NMAX], st;

void dfs(int nod){
    if (k[nod] == 0) ans[nod] = 0;
    else ans[nod] = ans[st[max(0, (int)st.size() - k[nod])]] + 1;
    st.push_back(nod);

    for (auto it : v[nod]){
        dfs(it);
    }

    st.pop_back();
}

int main()
{
    cin.sync_with_stdio(false);
    freopen("cerere.in","r",stdin);
    freopen("cerere.out","w",stdout);

    cin >> n;
    for (int i=1;i<=n;i++) cin >> k[i];

    for (int i=1;i<n;i++){
        int a,b;
        cin >> a >> b;
        v[a].push_back(b);
        IN[b]++;
    }
    int rad = 0;

    for (int i=1;i<n;i++) if (IN[i] == 0) rad = i;

    dfs(rad);

    for (int i=1;i<=n;i++) cout << ans[i] << ' ';
    cout << '\n';

    return 0;
}