Pagini recente » Cod sursa (job #2076227) | Cod sursa (job #2073917) | Cod sursa (job #934436) | Cod sursa (job #750094) | Cod sursa (job #682676)
Cod sursa(job #682676)
#include<cstdio>
#include<vector>
using namespace std;
int n,i,x,y,sd,rad,S[100010],viz[100010],K[100010],st[100010];
vector<int> V[100010];
void read(),solve(),dfs(int);
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++){S[i]=-1;scanf("%d",&K[i]);}
for(i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
V[x].push_back(y);
S[y]=0;
}
for(i=1;i<=n;i++)
if(S[i]==-1)
{
S[i]=0;
rad=i;
break;
}
}
void solve()
{
dfs(rad);
for(i=1;i<=n;i++)printf("%d ",S[i]);
}
void dfs(int nod)
{
viz[nod]=1;
st[++sd]=nod;
S[nod]=1+S[st[sd-K[nod]]];
if(K[nod]==0)S[nod]=0;
for(vector<int>::iterator it=V[nod].begin();it!=V[nod].end();it++)
{
int curr=*it;
if(!viz[*it])
dfs(curr);
st[sd--]=0;
}
}