Pagini recente » Cod sursa (job #2721878) | Cod sursa (job #2873176) | Cod sursa (job #2510679) | Cod sursa (job #2461020) | Cod sursa (job #364472)
Cod sursa(job #364472)
#include <algorithm>
using namespace std;
#define DIM 100001
#define LOG 18
int n, k[ DIM ], cnt[ DIM ], sol[ LOG ][ DIM ];
inline void calc_sol() {
int i, j;
for( i = 1; i < LOG; ++i )
for( j = 1; j <= n; ++j )
sol[ i ][ j ] = sol[ i-1 ][ sol[ i-1 ][ j ] ];
}
inline void init_nr() {
int i;
for( i = 1; i <= n; ++i )
cnt[ i ] = 0;
}
inline int calc( int nod, int nr ) {
int i;
while( nr ) {
for( i = 0; ( 1<<( i+1 ) ) <= nr; ++i );
nr -= ( 1<<i );
if( nr )
nod = sol[ i ][ nod ];
}
return sol[ i ][ nod ];
}
int main() {
freopen( "cerere.in", "r", stdin );
freopen( "cerere.out", "w", stdout );
int i, x, y, nod;
scanf( "%d", &n );
for( i = 1; i <= n; ++i )
scanf( "%d", &k[ i ] );
for( i = 1; i < n; ++i ) {
scanf( "%d %d", &x, &y );
sol[ 0 ][ y ] = x;
}
calc_sol();
init_nr();
/*for( i = 1; i <= n; ++i ) {
nod = i;
for( ; k[ nod ]; ++cnt[ i ] ) {
nod = calc( nod, k[ nod ] );
if( !k[ nod ] )
cnt[ i ] += cnt[ nod ];
}
k[ i ] = 0;
printf( "%d ", cnt[ i ] );
}*/
return 0;
}