Pagini recente » Cod sursa (job #1568617) | Cod sursa (job #1279442) | Cod sursa (job #2194018) | Cod sursa (job #2191196) | Cod sursa (job #1723197)
#include<cstdio>
#include<vector>
#define MAXN 100010
using namespace std;
vector<int> g[MAXN];
int ancestor[MAXN],answer[MAXN],Stack[MAXN],notRoot[MAXN],top=0;
void DFS(int node){
int i;
Stack[top]=node;
top++;
if(ancestor[node]==0)
answer[node]=0;
else
answer[node]=1+answer[Stack[top-ancestor[node]-1]];
for(i=0;i<g[node].size();i++)
DFS(g[node][i]);
top--;
}
int main(){
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
int n,i,a,b;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&ancestor[i]);
for(i=1;i<n;i++){
scanf("%d%d",&a,&b);
notRoot[b]=1;
g[a].push_back(b);
}
for(i=1;i<=n;i++)
if(notRoot[i]==0)
DFS(i);
for(i=1;i<=n;i++)
printf("%d ",answer[i]);
return 0;
}