Pagini recente » Cod sursa (job #791756) | Cod sursa (job #2442643) | Cod sursa (job #1608555) | Cod sursa (job #2685709) | Cod sursa (job #2147473)
#pragma GCC optimize("03")
#include <bits/stdc++.h>
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
int n, nr[100100], dp[100100], st[100100], vf, x, y, idx;
bool bad[100100], viz[100100];
vector <int> v[100100];
void dfs(int from){
viz[from] = 1;
st[++vf] = from;
if(!nr[from])
dp[from] = 0;
else dp[from] = 1 + dp[st[vf - nr[from]]];
for(auto to : v[from])
if(!viz[to])
dfs(to);
vf--;
}
int main(){
in >> n;
for(int i = 1; i <= n; i++)
in >> nr[i];
for(int i = 1; i < n; i++){
in >> x >> y;
v[x].push_back(y);
bad[y] = 1;
}
for(int i = 1; i <= n; i++)
if(!bad[i])
idx = i;
dfs(idx);
for(int i = 1; i <= n; i++)
out << dp[i] << ' ';
return 0;
}