Pagini recente » Istoria paginii utilizator/alias47 | Cod sursa (job #3339195) | Cod sursa (job #3317886) | Cod sursa (job #3334179) | Cod sursa (job #3337910)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n;
vector<vector<int>>a;
vector<int>dp;
vector<int> viz,v;
void dfs(int nod,int p){
dp[nod]=v[nod];
for(auto f:a[nod]){
if(f==p) continue;
dfs(f,nod);
if(dp[f]>0) dp[nod]+=dp[f];
}
}
int main(){
fin>>n;
a.resize(n+1);
viz.resize(n+1);
v.resize(n+1);
dp.resize(n+1);
for(int i=1;i<=n;i++) fin>>v[i];
int x,y;
for(int i=0;i<n-1;i++){
fin>>x>>y;
a[x].push_back(y);
a[y].push_back(x);
}
dfs(1,0);
int rez=*max_element(dp.begin()+1,dp.end());
fout<<rez;
return 0;
}