Pagini recente » Cod sursa (job #562208) | Cod sursa (job #753652) | Cod sursa (job #2034184) | Cod sursa (job #1636614) | Cod sursa (job #1002069)
#include <cstdio>
#include <vector>
using namespace std;
int k[100005];
int stk[100005],zero[100005],stp;
int res[100005];
vector <int> v[100005];
int n;
void dfs(int n) {
stk[stp] = n;
if (k[n] == 0) zero[stp] = 0;
else zero[stp] = zero[stp-1] +1;
if (k[n] == 0) res[n] = 0;
else if (zero[stp]%k[n] == 0) res[n] = zero[stp]/k[n];
else res[n] = zero[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);
}
dfs(1);
for (int i=1;i<=n;i++) printf("%d ",res[i]);
printf("\n");
return 0;
}