Pagini recente » Cod sursa (job #3363583) | Cod sursa (job #3364304) | Cod sursa (job #3364407) | Cod sursa (job #3364405) | Cod sursa (job #3364545)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
vector<int> ad[16005];
int v[16005],dp[16005],vf[16005];
int rez=-1000000000;
void dfs(int x){
vf[x]=1;
dp[x]=v[x];
for(int i=0;i<ad[x].size();i++){
if(vf[ad[x][i]]==0) {
dfs(ad[x][i]);
if(dp[ad[x][i]]>0)
dp[x]+=dp[ad[x][i]];
}
}
if(dp[x]>rez)
rez=dp[x];
}
int main(){
int n,a,b;
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
for(int i=1;i<n;i++) {
cin>>a>>b;
ad[a].push_back(b);
ad[b].push_back(a);
}
dfs(1);
cout<<rez;
return 0;
}