Pagini recente » Cod sursa (job #3362231) | Cod sursa (job #3362046) | Cod sursa (job #3362173) | Cod sursa (job #3362232) | Cod sursa (job #3361877)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5;
int k[MAXN + 1] , stm[MAXN + 1] , ans[MAXN + 1] , dims;
vector < int > vec[MAXN + 1];
bitset < MAXN + 1 > vfb , vzn;
void dfs ( int nod ) {
vzn[nod] = 1;
dims++;
stm[dims] = nod;
if ( k[nod] != 0 )
ans[nod] = ans[stm[dims - k[nod]]] + 1;
int i;
for ( i = 0 ; i < vec[nod].size () ; i++ )
if ( vzn[vec[nod][i]] == 0 )
dfs ( vec[nod][i] );
dims--; // scoatem nr din coada
}
int main () {
ifstream fin ( "cerere.in" );
ofstream fout ( "cerere.out" );
int n , i , a , b;
fin >> n;
for ( i = 1 ; i <= n ; i++ )
fin >> k[i];
for ( i = 1 ; i < n ; i++ ) {
fin >> a >> b;
vec[a].push_back ( b );
vfb[b] = 1;
}
i = 1;
while ( vfb[i] == 1 )
i++;
dims = 0;
dfs ( i );
for ( i = 1 ; i <= n ; i++ )
fout << ans[i] << ' ';
fout.put ( '\n' );
return 0;
}