P1352树形dp30pts求助!
  • 板块学术版
  • 楼主WD2c0mP
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/2/19 15:29
  • 上次更新2023/10/24 00:20:32
查看原帖
P1352树形dp30pts求助!
780641
WD2c0mP楼主2023/2/19 15:29

P1352树形dp30pts求助!

#include<bits/stdc++.h>
using namespace std;
int r[6010],vi[6010],dp[6010][2];//dp[i][0]表示i不参加舞会最大快乐值 dp[i][1]表示i参加舞会最大快乐值 
vector<int>G[6010];
void dfs(int x) {
	dp[x][0] = 0;
	dp[x][1] = r[x];
	for (unsigned i = 0;i < G[x].size();i ++) {
		int v = G[x][i];
		dfs(v);
		dp[x][0] += max(dp[v][0],dp[v][1]);
		dp[x][1] += dp[v][0];
	}
}
int main(){
	int n;
	cin >> n;
	for (int i = 1;i <= n;i ++) cin >> r[i];
	for (int i = 1;i < n;i ++) {
		int u,v;
		cin >> u >> v;
		G[v].push_back(u);
		vi[u] = 1;
	}
	int rt;
	for (int i = 1;i <= n;i ++) {
		if (!vi[i]) rt = i;
	}
	dfs(rt);
	cout << max(dp[1][0],dp[1][1]) << endl;
	return 0;
}
2023/2/19 15:29
加载中...