Pagini recente » Cod sursa (job #747489) | Cod sursa (job #2430234) | Cod sursa (job #2271051) | Cod sursa (job #3190551) | Cod sursa (job #2408540)
#include <bits/stdc++.h>
using namespace std;
const int mxn = 16 * 1000 + 10;
vector< int > g[ mxn ];
int val[ mxn ];
int dp[ mxn ];
bitset< mxn > viz;
int n;
int sol = -1e5;
void dfs(int nod){
viz[ nod ] = 1;
for(auto it: g[ nod ]){
if(viz[ it ] == 0){
dfs( it );
dp[ nod ] += max(0, dp[ it ]);
}
}
dp[ nod ] += val[ nod ];
sol = max(sol, dp[ nod ]);
}
int main()
{
ifstream cin("asmax.in");
ofstream cout("asmax.out");
cin>> n;
for(int i = 1; i <= n; i++){
cin>> val[ i ];
sol = max(sol, val[ i ]);
}
for(int i = 1, x, y; i < n; i++){
cin>> x >> y;
g[ x ].push_back( y );
g[ y ].push_back( x );
}
dfs( 1 );
cout<< sol;
return 0;
}