Pagini recente » Cod sursa (job #2297197) | Cod sursa (job #352249) | Cod sursa (job #2275279) | Cod sursa (job #2280179) | Cod sursa (job #2380814)
#include <bits/stdc++.h>
using namespace std ;
const int NR = 100005 ;
ifstream in ("cerere.in") ;
ofstream out ("cerere.out") ;
vector < int > v [ NR ] ;
deque < int > s ;
deque < int > :: iterator it ;
int n , i , c [ NR ] , x , y , sol [ NR ] ;
bool notroot [ NR ] ;
void dfs ( int nod ) {
if ( c [ nod ] ) {
it = s.end() - c [ nod ] - 1 ;
sol [ nod ] = sol [ *it ] + 1 ;
}
for ( vector < int > :: iterator e = v [ nod ].begin() ; e != v [ nod ].end() ; ++ e ) {
s.push_back( *e ) ;
dfs ( *e ) ;
s.pop_back() ;
}
}
int main () {
in >> n ;
for ( i = 1 ; i <= n ; ++ i ) in >> c [ i ] ;
for ( i = 1 ; i < n ; ++ i ) {
in >> x >> y ;
v [ x ].push_back( y ) ;
notroot [ y ] = 1 ;
}
i = 0 ;
while ( ++ i ) {
if ( !notroot [ i ] ) {
s.push_back( i ) ;
dfs( i ) ;
s.pop_back() ;
break ;
}
}
for ( i = 1 ; i <= n ; ++ i ) out << sol [ i ] << ' ' ;
}