一个问题
查看原帖
一个问题
648996
_orange_楼主2023/6/22 23:58
#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]]);

就过不了样例

为什么会有这种情况???

2023/6/22 23:58
加载中...