Cod sursa(job #2457478)

Utilizator lucametehauDart Monkey lucametehau Data 17 septembrie 2019 21:17:54
Problema Cerere Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <fstream>
#include <vector>

using namespace std;

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

int n, x, y;

int dp[100005], k[100005];
int curr[100005];
vector <int> g[100005];

void dfs(int nod, int niv) {
  curr[niv] = nod;
  if(k[nod])
    dp[nod] = dp[curr[niv - k[nod]]] + 1;
  else
    dp[nod] = 0;
  for(auto &son : g[nod])
    dfs(son, niv + 1);
}

int main() {
  cin >> n;
  for(int i = 1; i <= n; i++)
    cin >> k[i];
  for(int i = 1; i < n; i++) {
    cin >> x >> y;
    g[x].push_back(y);
  }
  dfs(1, 1);
  for(int i = 1; i <= n; i++)
    cout << dp[i] << " ";
  return 0;
}