Pagini recente » Cod sursa (job #2225174) | Cod sursa (job #375596) | Cod sursa (job #2869397) | Cod sursa (job #2440983) | Cod sursa (job #633232)
Cod sursa(job #633232)
#include<cstdio>
#include<vector>
#define LEN 100005
using namespace std;
vector<int> v[LEN];
bool notroot[LEN];
int d[LEN],k[LEN],ans[LEN],p;
void dfs(int x){
d[p]=x;
if(k[x])
ans[x]=ans[d[p-k[x]]]+1;
for(int i=0;i<v[x].size();i++){
++p;
dfs(v[x][i]);
--p;
}
}
int main(){
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",k+i);
for(int i=0;i<n-1;i++){
int x,y;
scanf("%d%d",&x,&y);
notroot[y]=1;
v[x].push_back(y);
}
int r;
for(r=1;r<=n;r++)
if(!notroot[r])break;
dfs(r);
for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
}