Cod sursa(job #3144573)

Utilizator DooMeDCristian Alexutan DooMeD Data 8 august 2023 21:33:01
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e5;

int k[nmax+5], ans[nmax+5];
bool hf[nmax+5];

vector<vector<int>> dx(nmax+5);
vector<int> st;

void dfs(int node) {
    st.emplace_back(node);
    if(k[node] == 0) ans[node] = 0;
    else ans[node] = ans[st[st.size() - 1 - k[node]]] + 1;
    for(auto i : dx[node]) dfs(i);
    st.pop_back();
}

int main() {
    ifstream f("cerere.in");
    ofstream g("cerere.out");

    int n; f >> n;
    for(int i=1; i<=n; i++) f >> k[i];
    for(int i=1; i<=n-1; i++) {
        int x, y; f >> x >> y;
        dx[x].emplace_back(y);
        hf[y] = true;
    }

    int root = 0;
    for(int i=1; i<=n; i++)
        if(hf[i] == false) {
            root = i;
            break;
        }

    dfs(root);
    for(int i=1; i<=n; i++) g << ans[i] << " ";
    return 0;
}