Cod sursa(job #1258161)

Utilizator toniobFMI - Barbalau Antonio toniob Data 8 noiembrie 2014 15:52:39
Problema Cerere Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
# 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 (  ) ;

}