Pagini recente » Cod sursa (job #619630) | Cod sursa (job #1601373) | Cod sursa (job #2403819) | Cod sursa (job #311141) | Cod sursa (job #1002288)
#include <cstdio>
#include <vector>
using namespace std;
int k[100005];
int stk[100005],stp;
int res[100005];
vector <int> v[100005];
int n;
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]);
if (k[i] == 0) v[0].push_back(i);
}
for (int i=1;i<n;i++) {
int a,b;
scanf("%d %d",&a,&b);
v[a].push_back(b);
}
dfs(0);
for (int i=1;i<=n;i++) printf("%d ",res[i]);
printf("\n");
return 0;
}