Pagini recente » Cod sursa (job #397124) | Cod sursa (job #1795838) | Cod sursa (job #171502) | Cod sursa (job #1755630) | Cod sursa (job #1207831)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int NMAX = 100001;
int n, stv[NMAX], ans[NMAX], k[NMAX], t[NMAX];
vector<int> gf[NMAX];
void dfs(int node){
stv[++stv[0]] = node;
if (k[node] == 0) ans[node] = 0;
else ans[node] = ans[ stv[stv[0] - k[node]] ] + 1;
for(int i=0; i<(int)gf[node].size(); ++i){
dfs(gf[node][i]);
}
--stv[0];
}
int main() {
freopen("cerere.in", "r", stdin);
//freopen("cerere.out", "w", stdout);
ofstream g("cerere.out");
cin >> n;
for(int i=1; i<=n; ++i) cin >> k[i];
for(int i=1; i<n; ++i){
int x, y;
cin >> x >> y;
gf[x].push_back(y);
t[y] = x;
}
int rad = 0;
for(int i=1; i<=n; ++i) if (t[i] == 0) rad = i;
dfs(rad);
for(int i=1; i<=n; ++i){
//cout << ans[i] << " ";
g << ans[i] << " ";
}
return 0;
}