Pagini recente » Cod sursa (job #2156203) | Cod sursa (job #3197758) | Cod sursa (job #711989) | Cod sursa (job #3145222) | Cod sursa (job #2358681)
#include <bits/stdc++.h>
#define DIM 100000
using namespace std;
ifstream in("cerere.in");
ofstream out("cerere.out");
int n;
int k[DIM], Stack[DIM + 5], D[DIM + 5];
vector<int> children[DIM + 5];
bool visited[DIM + 5];
void dfs( int node, int step )
{
visited[node] = true;
Stack[step] = node;
D[node] = 1 + D[ Stack[step - k[node]] ];
for( int child : children[node] )
if( !visited[child] )
dfs(child, step + 1);
}
int main()
{
in>>n;
for( int i = 1; i <= n; i++ )
in>>k[i];
for( int i = 1; i < n; i++ )
{
int from, to;
in>>from>>to;
children[from].push_back(to);
}
dfs(1, 1);
for( int i = 1; i <= n; i++ )
out<<D[i] - 1<<" ";
return 0;
}