Cod sursa(job #2777474)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 23 septembrie 2021 14:04:34
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <fstream>
#include <vector>

using namespace std;

const int N = 1e5 + 5;

vector<int> fii[N];
int k[N], st[N], dp[N];
bool nu_rad[N];

void dfs(int nod, int niv) {
  st[niv] = nod;
  if (k[nod])
    dp[nod] = 1 + dp[st[niv - k[nod]]];
  for (auto vec : fii[nod])
    dfs(vec, niv + 1);
}

int main() {
  ifstream cin("cerere.in");
  ofstream cout("cerere.out");
  int n;
  cin >> n;
  for (int i = 1; i <= n; ++i)
    cin >> k[i];
  for (int i = 0; i < n - 1; ++i) {
    int x, y;
    cin >> x >> y;
    fii[x].push_back(y);
    nu_rad[y] = true;
  }
  cin.close();
  int rad;
  for (int i = 1; i <= n; ++i)
    if (!nu_rad[i]) {
      rad = i;
      break;
    }
  dfs(rad, 0);
  for (int i = 1; i <= n; ++i)
    cout << dp[i] << " ";
  cout.close();
  return 0;
}