Cod sursa(job #3140072)

Utilizator RolandPetreanPetrean Roland RolandPetrean Data 3 iulie 2023 17:52:41
Problema Cerere Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.68 kb
// https://www.infoarena.ro/problema/cerere
#include <bits/stdc++.h>
using namespace std;
#define endl '\n'

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

const int N = 1e5+5;
int k[N], dp[N];
bool not_root[N];
vector<int> adj[N];

vector<int> path;
void dfs(int u) {
  path.push_back(u);

  dp[u] = -1;
  dp[u] = dp[path[path.size() - k[u] - 1]] + 1;
  for (int v : adj[u]) dfs(v);

  path.pop_back();
}

int main() {
  int n;
  fin>>n;

  for (int i=1; i<=n; ++i) fin>>k[i];
  for (int i=0; i<n-1; ++i) {
    int u, v;
    fin>>u>>v;
    adj[u].push_back(v);
    not_root[v] = true;
  }

  int r=1;
  while (not_root[r]) ++r;
  dfs(r);

  for (int i=1; i<=n; ++i) fout<<dp[i]<<" ";
}