Pagini recente » Cod sursa (job #899995) | Cod sursa (job #3161092) | Cod sursa (job #1569824) | Cod sursa (job #2064255) | Cod sursa (job #6642)
Cod sursa(job #6642)
#include<stdio.h>
#include<vector>
using namespace std;
const int maxn = 100001;
vector <int> vect[maxn];
int l;
int n;
int st[maxn];
int le[maxn];
int k[maxn];
int nr[maxn];
int i;
int j;
int x;
int y;
void dfs(int i)
{
vector <int>:: iterator it;
l++;
st[l]=i;
int x=*it;
if (k[i])
{
le[l]=le[l-k[i]]+1;
}
else
{
le[l]=0;
}
for(it=vect[i].begin();it!=vect[i].end();it++)
{
int x=*it;
dfs(*it);
}
nr[st[l]]=le[l];
l--;
}
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-1;i++)
{
scanf("%d %d",&x,&y);
vect[x].push_back(y);
nr[y]++;
}
for(i=1;i<=n;i++)
if (nr[i]==0) break;
dfs(i);
for(i=1;i<=n;i++)
printf("%d ",nr[i]);
printf("\n");
return 0;
}