Pagini recente » Cod sursa (job #1108063) | Cod sursa (job #80849) | Cod sursa (job #2333041) | Cod sursa (job #1811418) | Cod sursa (job #2980596)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("cerere.in");
ofstream cout("cerere.out");
const int MAX = 1e5 + 1;
vector <int> g[MAX];
int path[MAX] , s[MAX] , gr[MAX] , n , x , y , kp , dp[MAX];
void dfs( int x ){
path[++kp] = x;
if(s[x]){
dp[x] = dp[path[kp-s[x]]] + 1;
}
for(auto it : g[x]){
dfs(it);
}
--kp;
}
int main(){
cin >> n;
for(int i = 1 ; i <= n ; i++){
cin >> s[i];
}
for(int i = 1 ; i < n ; i++){
cin >> x >> y;
g[x].push_back(y);
gr[y]++;
}
int r;
for(int i = 1 ; i <= n ; i++){
if(!gr[i]){
r = i;
break;
}
}
dfs(r);
for(int i = 1 ; i <= n ; i++){
cout << dp[i] << ' ';
}
return 0;
}