Cod sursa(job #3175273)

Utilizator MAlex2019Melintioi George Alexandru MAlex2019 Data 25 noiembrie 2023 16:21:29
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

ifstream fin("cerere.in");
ofstream fout("cerere.out");

const int maxn = 1e5;
int k[maxn];
vector<int> down[maxn];
int ans[maxn];

void dfs(int curr, vector<int> &strap) {
    if (k[curr] == 0)
        ans[curr] = 0;
    else
        ans[curr] = ans[strap[strap.size() - k[curr]]] + 1;
    strap.push_back(curr);
    for (int child: down[curr])
        dfs(child, strap);
    strap.resize(strap.size() - 1);
}

int main() {
    int n;
    fin >> n;
    for (int i = 0; i < n; i++)
        fin >> k[i];
    for (int i = 0; i < n - 1; i++) {
        int a, b;
        fin >> a >> b;
        a--;
        b--;
        down[a].push_back(b);
    }
    vector<int> aa;
    dfs(0, aa);
    for (int i = 0; i < n; i++)
        fout << ans[i] << ' ';

    return 0;
}