Pagini recente » Cod sursa (job #3236848) | Cod sursa (job #2596007) | Cod sursa (job #2180102) | Cod sursa (job #344601) | Cod sursa (job #430646)
Cod sursa(job #430646)
#include<cstdio>
#include<vector>
using namespace std;
int u,n,ori,lung,nec[1<<17],str[1<<17],fin[1<<17],Q[1<<17];
vector<int> L[1<<17];
void dfs(int i)
{
Q[++u]=i;
for(vector<int>::iterator it=L[i].begin();it!=L[i].end();it++)
dfs(*it);
str[i]=Q[u-nec[i]];
--u;
}
void inte(int i)
{
if(nec[i]==0)
return;
lung++;
inte(str[i]);
}
int main()
{
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&nec[i]);
for(int i=1;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
L[x].push_back(y);
}
dfs(1);
for(int i=1;i<=n;i++)
{
lung=0;
inte(i);
fin[i]=lung;
}
for(int i=1;i<=n;i++)
printf("%d ",fin[i]);
return 0;
}