萌新妹子初学树形dp 60pts求调
查看原帖
萌新妹子初学树形dp 60pts求调
912248
FuckYouJinhai楼主2023/3/29 19:26
#include <cstdio>
#include <vector>
#include <algorithm>

int dp[6030][2], v[6030], n, r;
std::vector<int>c[6030];
bool has_fa[6030];

void dfs (int i) {
	dp[i][1] = v[i];
	for (int j = 0; j < c[i].size(); ++j) {
		dfs(c[i][j]);
		dp[i][0] = std::max(dp[c[i][j]][0], dp[c[i][j]][1]);
		dp[i][1] += dp[c[i][j]][0];
	}
}

int main () {
	scanf("%d", &n);
	for (int i = 1; i <= n; ++i)
		scanf("%d", &v[i]);
	for (int i = 1; i <= n - 1; ++i) {
		int l, k;
		scanf("%d%d", &l, &k);
		c[k].push_back(l);
		has_fa[l] = 1;
	}
	for (int i = 1; i <= n; ++i)
		if(!has_fa[i]){
			r = i;
			break;
		}
	dfs(r);
	printf("%d", std::max(dp[r][0], dp[r][1]));
	return 0;
}
2023/3/29 19:26
加载中...