Pagini recente » Cod sursa (job #2972521) | Cod sursa (job #208203) | Cod sursa (job #2477309) | Cod sursa (job #1897023) | Cod sursa (job #2039322)
#include <bits/stdc++.h>
using namespace std;
int n,i,v[100010],x,y,in,k,st[100010],ans[100010];
vector<int>g[100010];
bool ta[100010],mrk[100010];
void dsf(int node)
{
mrk[node]=true;
st[++k]=node;
if(v[node]==0)ans[node]=0;
else ans[node]=ans[st[k-v[node]]]+1;
for(auto &it:g[node])
if(!mrk[it])dsf(it);
--k;
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(i=1; i<=n; ++i)
scanf("%d",&v[i]);
for(i=1; i<n; ++i)
{
scanf("%d%d",&x,&y);
g[x].push_back(y);
ta[y]=true;
}
for(i=1; i<=n; ++i)
if(!ta[i])
{
in=i;
break;
}
dsf(in);
for(i=1; i<=n; ++i)
printf("%d ",ans[i]);
return 0;
}