样例没过却AC了,求解...
查看原帖
样例没过却AC了,求解...
164302
endless_loop楼主2021/4/5 11:54
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
const int maxn=16000+50;
int n,a[maxn];
int head[maxn];
vector <int> G[maxn];
int dp[maxn];
int _ans=-1000;
int dfs(int x, int pa) {
	int& ans = dp[x];
	if(ans>=0)return dp[x];
	ans=a[x];
	for(int i = 0; i < G[x].size(); i++) {
		int& t = G[x][i];
		if(t != pa) {
			ans+=max(dfs(t, x),0);
		}
	}
	ans=max(ans,0);
	_ans=max(ans,0);
	return ans;
}
int main() {
	cin>>n;
	memset(dp,-1,sizeof(dp));
	for(int i=1; i<=n; ++i)
		cin>>a[i];
	for(int i=0; i<n-1; ++i) {
		int u, v;
		cin>>u>>v;
		G[u].push_back(v);
		G[v].push_back(u);
	}
	cout<<dfs(1,0);
	return 0;
}

提交记录

2021/4/5 11:54
加载中...