Cod sursa(job #2794282)

Utilizator ElizaTElla Rose ElizaT Data 4 noiembrie 2021 16:44:23
Problema Cerere Scor 75
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 1e5;
int k[NMAX + 5],dp[NMAX + 5];
vector <int> e[NMAX + 5],v;

void dfs(int node) {
    v.push_back(node);
    if (k[node])
        dp[node] = dp[v[v.size() - 1 - k[node]]] + 1;
    for (int i = 0;i < e[node].size();i++)
        dfs(e[node][i]);
    v.pop_back();
}
int main()
{
    ifstream fin("cerere.in");
    ofstream fout("cerere.out");
    int n,a,b;
    long long s = 0;
    fin >> n;
    s = 1ll * n * (n + 1) / 2;
    for (int i = 1;i <= n;i++)
        fin >> k[i];
    for (int i = 0;i < n - 1;i++) {
        fin >> a >> b;
        e[a].push_back(b);
        s -= b;
    }
    dfs(s);
    for (int i = 1;i <= n;i++)
        fout << dp[i] << " ";
    return 0;
}