Pagini recente » Cod sursa (job #2113378) | Cod sursa (job #3158070) | Cod sursa (job #647504) | Cod sursa (job #190497) | Cod sursa (job #3140072)
// 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]<<" ";
}