Cod sursa(job #3304046)

Utilizator Andrei-Dani-10Pisla Andrei Daniel Andrei-Dani-10 Data 19 iulie 2025 22:30:58
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int nmax = 1e5;
int n, a, b, monkey[nmax + 2];
vector <int> muchii[nmax + 2];

int dp[nmax + 2];

int dfsstack[nmax + 2], topp;

void dfs(int node, int father){
    dfsstack[++topp] = node;

    dp[node] = dp[dfsstack[topp - monkey[node]]] + 1;
    for(auto nxt : muchii[node]){
        if(nxt != father)
            dfs(nxt, node);
    }

    dfsstack[topp--] = node;
}

int main(){

    in>>n;
    for(int i = 1; i <= n; i++)
        in>>monkey[i];

    for(int i = 1; i <= n - 1; i++){
        in>>a>>b;
        muchii[a].push_back(b);
        muchii[b].push_back(a);
    }

    dfs(1, 0);

    for(int i = 1; i <= n; i++)
        out<<(dp[i] - 1)<<" "; out<<"\n";
    return 0;
}