Pagini recente » Cod sursa (job #1231775) | Cod sursa (job #1439074) | Cod sursa (job #1291478) | Cod sursa (job #245703) | Cod sursa (job #2920684)
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
int n;
vector<int> weights;
vector<vector<int>> graph;
vector<int> dp;
vector<bitset<1>> visited;
void read() {
cin>>n;
weights.resize(n+1);
visited.resize(n+1);
for(int i=1;i<=n;i++) {
cin>>weights[i];
}
graph.resize(n+1);
int a,b;
for(int i=1;i<=n-1;i++) {
cin>>a>>b;
graph[a].push_back(b);
graph[b].push_back(a);
}
}
void dfs(int node) {
visited[node]=1;
dp[node]=weights[node];
for(auto i:graph[node]) {
if(visited[i]==1) {
continue;
}
dfs(i);
if(dp[i]>0) {
dp[node]+=dp[i];
}
}
}
void solve() {
dp.resize(n+1);
dfs(1);
int res=0;
for(int i=1;i<=n;i++) {
res=max(res,dp[i]);
}
cout<<res;
}
int main() {
read();
solve();
return 0;
}