Pagini recente » Cod sursa (job #2682111) | Cod sursa (job #2751447) | Cod sursa (job #1602249) | Cod sursa (job #1878773) | Cod sursa (job #1003328)
#include <cstdio>
#include <vector>
using namespace std;
int res[100005];
vector <int> v[100005];
int n;
int stk[100005],stp;
int k[100005];
int t[100005];
void dfs(int n) {
stk[stp] = n;
if (k[n] == 0) res[n] = 0;
else res[n] = res[stk[stp-k[n]]] +1;
stp++;
while (!v[n].empty()) {
int nod = v[n].back(); v[n].pop_back();
dfs(nod);
}
stp--;
}
int main() {
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&k[i]);
for (int i=1;i<n;i++) {
int a,b;
scanf("%d %d",&a,&b);
v[a].push_back(b);
t[b] = a;
}
int nod1;
for (int i=1;i<=n;i++) if (t[i] == 0) {nod1 = i;break;}
dfs(nod1);
for (int i=1;i<=n;i++) printf("%d ",res[i]);
return 0;
}