Pagini recente » Monitorul de evaluare | Cod sursa (job #2780212)
#include <fstream>
#include <algorithm>
#include <vector>
std::ifstream in("asmax.in");
std::ofstream out("asmax.out");
const int N = 16e3+1;
std::vector<int> g[N];
int v[N];
long long smax= -N*1e3;
int dp[N];
bool visited[N];
void dfs(int i){
visited[i] = 1;
dp[i] = v[i];
for(auto nod : g[i]){
if(!visited[nod]){
dfs(nod);
dp[i] += std::max(0, dp[nod]);
}
}
}
int main(){
int n;
in>>n;
for(int i=1;i<=n;++i){
in>>v[i];
}
for(int i=0;i<n-1;++i){
int a,b;
in>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
dfs(1);
out<<dp[1];
in.close();
out.close();
return 0;
}