Cod sursa(job #2542092)

Utilizator bluestorm57Vasile T bluestorm57 Data 9 februarie 2020 14:30:41
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 1e5 + 10;
int n,k[NMAX],ans[NMAX],father[NMAX];
vector < int > v[NMAX];

void dfs(int node){
    if(k[node]){
        int x = node;
        while(k[node]){
            x = father[x];
            k[node]--;
        }
        ans[node] = ans[x] + 1;
    }
    for(auto it: v[node])
        dfs(it);
}

int main(){
    int i,j,x,y;
    f >> n;
    for(i = 1 ; i <= n ; i++)
        f >> k[i];

    for(i = 1 ; i < n ; i++){
        f >> x >> y;
        v[x].push_back(y);
        father[y] = x;
    }

    dfs(1);

    for(i = 1 ; i <= n ; i++)
        g << ans[i] << " ";

    return 0;
}