Pagini recente » Cod sursa (job #1064045) | Cod sursa (job #1780473) | Cod sursa (job #248762) | Cod sursa (job #2171779) | Cod sursa (job #1257344)
/*
* Code by Spiromanul
*/
#include <fstream>
#include <vector>
#define pb push_back
const char IN [ ] = "cerere.in" ;
const char OUT [ ] = "cerere.out" ;
const int MAX = 100014 ;
using namespace std;
ifstream fin ( IN ) ;
ofstream fout ( OUT ) ;
vector < int > gr [ MAX ] ;
int st [ MAX ] , grad [ MAX ] , panalaspecialist [ MAX ] , sol [ MAX ] ;
void dfs ( int nod )
{
st [ ++ st [ 0 ] ] = nod ;
if ( panalaspecialist [ nod ] )
sol [ nod ] = sol [ st [ st [ 0 ] - panalaspecialist [ nod ] ] ] + 1 ;
for ( auto x : gr [ nod ] )
{
dfs ( x ) ;
-- st [ 0 ] ;
}
}
int main( )
{
int n ;
fin >> n ;
for ( int i = 1 ; i <= n ; ++ i )
fin >> panalaspecialist [ i ] ;
for ( int i = 1 ; i < n ; ++ i )
{
int tata , fiu ;
fin >> tata >> fiu ;
gr [ tata ].pb ( fiu ) ;
grad [ fiu ] ++ ;
}
int rad ;
for ( int i = 1 ; i <= n ; ++ i )
if ( grad [ i ] == 0 )
{
rad = i ;
break ;
}
dfs ( rad ) ;
for ( int i = 1 ; i <= n ; ++ i )
fout << sol [ i ] << ' ' ;
return 0;
}