Pagini recente » Cod sursa (job #268435) | Cod sursa (job #456821) | Cod sursa (job #1999140) | Cod sursa (job #1940731) | Cod sursa (job #2952582)
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
// zona declarare
const int MAX = 16e3 + 1;
const int MINIMPOSIBIL = (-1) * 1000 * 16000;
vector <int> g[MAX];
int dp[MAX] , n , maxim = MINIMPOSIBIL;
bitset <MAX> b;
// zona declarare
int dfs(int x){
int l = g[x].size();
b[x] = 1;
for(int i = 0 ; i < l ; i++){
int val = g[x][i];
if(!b[val]){
int y = dfs(val);
if( y > 0 ) dp[x] += y;
}
}
maxim = max(maxim,dp[x]);
return dp[x];
}
int main(){
cin >> n;
for(int i = 1 ; i <= n ; i++){
cin >> dp[i];
}
n--;
int x , y;
while(n--){
cin >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
dfs(1);
cout << maxim;
return 0;
}