Pagini recente » Cod sursa (job #1110787) | Cod sursa (job #1713222) | Cod sursa (job #1611696) | Cod sursa (job #1768437) | Cod sursa (job #2358690)
#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);
}
for( int i = 1; i <= n; i++ )
if( k[i] == 0 )
{
dfs(i, 1);
break;
}
for( int i = 1; i <= n; i++ )
out<<D[i] - 1<<" ";
return 0;
}