Pagini recente » Cod sursa (job #2060441) | Cod sursa (job #1478859) | Cod sursa (job #1167005) | Cod sursa (job #899741) | Cod sursa (job #2467409)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("asmax.in");
ofstream g ("asmax.out");
int const NM = 16001;
int v [NM] , vf [1 + 2 * NM] , nxt [1 + 2 * NM] , val [NM] , dp [NM];
int sz;
bool viz [NM];
void add (int x , int y){
++ sz;
vf [sz] = y;
nxt [sz] = v [x];
v [x] = sz;
}
void dfs (int node){
viz [node] = true;
for(int i = v [node] ; i ; i = nxt [i]){
int y = vf [i];
if (! viz [y]){
dfs (y);
dp [node] = max (dp [node] + dp [y] , dp [node]);
}
}
}
int main()
{
int n;
f >> n;
for(int i = 1 ; i <= n ; ++ i)
f >> val [i];
for(int i = 1 ; i < n ; ++ i){
int a , b;
f >> a >> b;
add (a , b);
add (b , a);
}
for(int i = 1 ; i <= n ; ++ i)
dp [i] = val [i];
for (int i = 1 ; i <= n ; ++ i)
if (! viz [i])
dfs (i);
g << *max_element (dp + 1 , dp + 1 + n);
return 0;
}