Pagini recente » Cod sursa (job #2835596) | Cod sursa (job #1781668) | Cod sursa (job #1943175) | Cod sursa (job #2026871) | Cod sursa (job #987481)
Cod sursa(job #987481)
#include <cstdio>
#include <vector>
#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]=nr[st[st[0]-k[x]]]+1;
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].push_back(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;
}