Pagini recente » Cod sursa (job #27167) | Cod sursa (job #266219) | Cod sursa (job #956292) | Cod sursa (job #2984634) | Cod sursa (job #57251)
Cod sursa(job #57251)
#include <stdio.h>
#include <vector>
#define pb push_back
#define nmax 100005
using namespace std;
vector <int> e[nmax];
int k[nmax],n1,n2,i,n,nr[nmax],st[nmax];
char v[nmax];
void dfs(int x) {
v[x] = 1;
st[++st[0]] = x;
if(k[x] != 0) nr[x] = 1 + nr[st[st[0] - k[x]]];
for(int i = 0; i < (int)e[x].size(); i++)
if(!v[e[x][i]]) dfs(e[x][i]);
st[0]--;
}
int main() {
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(i = 1; i <= n; i++) scanf("%d",&k[i]);
for(i = 1; i < n; i++) {
scanf("%d%d",&n1,&n2);
e[n1].pb(n2);
e[n2].pb(n1);
}
for(i = 1; i <= n; i++)
if(k[i] == 0 && !v[i]) dfs(i);
for(i = 1; i <= n; i++) printf("%d ",nr[i]); printf("\n");
return 0;
}