#include<bits/stdc++.h>
using namespace std;
vector<int>e[16001];
int n,val[16001],dp[16001];
void dfs(int node,int last){
dp[node]=val[node];
for(int i=e[node].size()-1;i>-1;i--){
if(e[node][i]==last)continue;
dfs(e[node][i],node);
if(dp[e[node][i]]>0)dp[node]+=dp[e[node][i]];
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&val[i]);
int a,b;
for(int i=1;i<n;i++){
scanf("%d%d",&a,&b);
e[a].push_back(b);
e[b].push_back(a);
}
dfs(1,-1);
int tot=-0x3f3f3f3f;
for(int i=1;i<=n;i++){
tot=max(dp[i],tot);
}
cout<<tot;
return 0;
}
这是本人AC代码 但dfs中的
if(dp[e[node][i]]>0)dp[node]+=dp[e[node][i]];
换成
dp[i]+=max(0,dp[e[node][i]]);
就过不了样例
为什么会有这种情况???