Pagini recente » Cod sursa (job #163798) | Cod sursa (job #1241680) | Cod sursa (job #1623735) | Cod sursa (job #1592928) | Cod sursa (job #1639288)
#include <cstdio>
#include <vector>
using namespace std;
const int NMAX=100005;
int v[NMAX],st[NMAX],dad[NMAX],solve[NMAX],cnt;
vector <int> G[NMAX];
void dfs(int x)
{
cnt++;
st[cnt]=x;
if(v[x]==0) solve[x]=0;
else solve[x]=solve[st[cnt-v[x]]]+1;
for(int i=0;i<(int)G[x].size();i++) dfs(G[x][i]);
cnt--;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
int n,i,j,a,b;
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%d",&v[i]);
for(i=1;i<n;i++)
{
scanf("%d%d",&a,&b);
G[a].push_back(b);
dad[b]=1;
}
for(i=1;i<=n;i++)
if(dad[i]==0) dfs(i);
for(i=1;i<=n;i++) printf("%d ",solve[i]);
printf("\n");
return 0;
}