求助4,5,6MLE
查看原帖
求助4,5,6MLE
675466
zzx0102楼主2022/10/17 19:38
#include<bits/stdc++.h>
using namespace std;
const int N = 16010;
int sum[N], val[N];
int h[N], to[N], nxt[N], idx;
void add(int a, int b) {
	to[idx] = b;
	nxt[idx] = h[a];
	h[a] = idx++;
}
int dp[N];
int n;
int mx = INT_MIN;
int dfs(int u, int fa) {
	dp[u] = val[u];
	for(int i = h[u]; i != -1; i = nxt[i]) {
		int v = to[i];
		if(v == fa) continue;
		int pre = dfs(v, u);
		if(pre > 0) dp[u] += dp[v];
	}
	mx = max(mx, dp[u]);
	return dp[u];
}
signed main() {
	memset(dp, -1, sizeof dp);
	memset(h, -1, sizeof h);
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> val[i];
	for(int i = 1; i < n; i++) {
		int a, b;
		cin >> a >> b;
		add(a, b);
		add(b, a);
	}
	dfs(1, 0);
	cout << mx;
	return 0;
}
2022/10/17 19:38
加载中...