Pagini recente » Cod sursa (job #1413924) | Cod sursa (job #39726) | Cod sursa (job #1618950) | Cod sursa (job #1618939) | Cod sursa (job #1347033)
#include<cstdio>
#include<vector>
using namespace std;
vector<int>v[100001];
bool vc[100001];
int a,b,n;
int vec[100001],rez[100001],st[100001];
void dfs(int nod,int k){
st[k]=nod;
if(vec[nod]==0){
rez[nod]=0;
for(int i=0;i<v[nod].size();i++){
dfs(v[nod][i],k+1);
}
}
else{
rez[nod]=rez[st[k-vec[nod]]]+1;
for(int i=0;i<v[nod].size();i++){
dfs(v[nod][i],k+1);
}
}
}
int main(){
freopen("cerere.in","r",stdin);
freopen("cerere.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&vec[i]);
for(int i=1;i<=n-1;i++){
scanf("%d%d",&a,&b);
v[a].push_back(b);
vc[b]=true;
}
for(int i=1;i<=n;i++)
if(vc[i]==false)
dfs(i,1);
for(int i=1;i<=n;i++)
printf("%d ",rez[i]);
return 0;
}