Pagini recente » Cod sursa (job #2972680) | Cod sursa (job #2975747) | Cod sursa (job #2789043) | Cod sursa (job #207525) | Cod sursa (job #2615455)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("cerere.in");
ofstream fout("cerere.out");
const int NMAX = 100000;
int lista[NMAX + 1], f[NMAX + 1];
int nr, dp[NMAX + 1], k[NMAX + 1];
vector<int> G[NMAX + 1];
void dfs( int node ) {
lista[++nr] = node;
dp[node] = (dp[lista[nr - k[node]]] + 1) * (k[node] != 0);
for( const auto &it : G[node] )
dfs(it);
nr --;
}
int main() {
int n;
fin>>n;
for( int i = 1; i <= n; i ++ ) {
fin>>k[i];
}
for( int i = 1; i < n; i ++ ) {
int a, b;
fin>>a>>b;
G[a].push_back(b);
f[b]++;
}
int rad;
for( int i = 1; i <= n; i ++ )
if( f[i] == 0 )
rad = i;
dfs(rad);
for( int i = 1; i <= n; i ++ )
fout<<dp[i]<<" ";
return 0;
}