Pagini recente » Cod sursa (job #2367815) | Cod sursa (job #1279926) | Cod sursa (job #1129837) | Cod sursa (job #503026) | Cod sursa (job #57255)
Cod sursa(job #57255)
#include <stdio.h>
#include <vector>
#define pb push_back
#define nmax 100005
using namespace std;
vector <int> e[nmax];
int k[nmax],gin[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);
gin[n2]++;
}
for(i = 1; i <= n; i++)
if(gin[i] == 0) dfs(i);
for(i = 1; i <= n; i++) printf("%d ",nr[i]); printf("\n");
return 0;
}