Pagini recente » Cod sursa (job #623955) | Cod sursa (job #1163148) | Cod sursa (job #1912549) | Cod sursa (job #3286303) | Cod sursa (job #2503684)
#include <fstream>
#include <vector>
#include <cstring>
#define N 16000 + 1
using namespace std;
ifstream f ( "asmax.in" );
ofstream g ( "asmax.out" );
vector < int > graph[N];
bool viz[N];
int val[N], d[2][N];
void dfs ( int node ){
viz[node] = 1;
for ( int i = 0; i < graph[node].size(); i++ ){
int new_node = graph[node][i];
if ( viz[new_node] == 0 ){
d[0][new_node] = d[0][node] + val[new_node];
d[1][new_node] = d[0][node];
dfs ( new_node );
d[0][node] = max ( d[0][node], max ( d[1][new_node], d[0][new_node] ) );
d[1][node] = max ( d[1][node], d[1][new_node] );
}
}
}
int main()
{ int n, i, rad, x, y, Max = -1001;
f >> n;
for ( i = 1; i <= n; i++ ){
f >> val[i];
if ( Max < val[i] ){
Max = val[i];
rad = i;
}
}
for ( i = 1; i <= n - 1; i++ ){
f >> x >> y;
graph[x].push_back ( y );
graph[y].push_back ( x );
}
d[0][rad] = val[rad];
dfs ( rad );
Max = -1001;
for ( i = 1; i <= n; i++ )
Max = max ( Max, d[0][i] );
g << Max;
return 0;
}