Pagini recente » Cod sursa (job #2785255) | Cod sursa (job #2441284) | Cod sursa (job #2473092) | Cod sursa (job #1714494) | Cod sursa (job #1258161)
# include <fstream>
# include <vector>
# include <bitset>
using namespace std ;
ifstream in ( "cerere.in" ) ;
ofstream out ( "cerere.out" ) ;
vector < int > l [ 100002 ] , s ;
int n , k [ 100002 ] , sol [ 100002 ] , rad ;
void read ( ) {
in >> n ;
for ( int i = 1 ; i <= n ; ++ i ) {
in >> k [ i ] ;
rad ^= i ;
}
for ( int i = 1 , a , b ; i <= n - 1 ; ++ i ) {
in >> a >> b ;
l [ a ] . push_back ( b ) ;
rad ^= b ;
}
}
void dfs(int node) {
s . push_back(node);
if ( !k[node] ) {
sol [ node ] = 0 ;
} else {
sol [ node ] = 1 + sol [ s[s.size()-1-k[node]] ] ;
}
for ( vector<int>::iterator i = l[node].begin() ; i != l[node].end() ; ++ i ) {
dfs(*i);
}
s . pop_back ( ) ;
}
void write_answer() {
for ( int i = 1 ; i <= n ; ++ i ) {
out << sol [ i ] << " " ;
}
}
int main ( ) {
read ( ) ;
dfs ( rad ) ;
write_answer ( ) ;
}