Pagini recente » Cod sursa (job #1853257) | Cod sursa (job #487415) | Cod sursa (job #1682355) | Cod sursa (job #2053400) | Cod sursa (job #2502135)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
int K[100005];
int val[100005];
int T[100005];
vector<int> G[100005];
vector<int> stiva;
void dfs(int nod,int tata){
int i;
stiva.push_back(nod);
if(K[nod] == 0){
val[nod] = 0;
}else{
val[nod] = val[stiva[stiva.size()-1-K[nod]]]+1;
}
for(i = 0; i < G[nod].size(); i++){
if(G[nod][i] != tata){
dfs(G[nod][i],nod);
}
}
stiva.pop_back();
}
int main(){
int n,a1,a2,rad;
fin>>n;
for(int i = 1; i <= n; i++){
fin>>K[i];
}
for(int i = 1; i <= n-1; i++){
fin>>a1>>a2;
G[a1].push_back(a2);
T[a2] = a1;
}
rad = 1;
while(T[rad] != 0){
rad = T[rad];
}
dfs(rad,0);
for(int i = 1; i <= n; i++){
fout<<val[i]<<' ';
}
return 0;
}