博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 P1352 没有上司的舞会 (树上不相邻点权和最大)
阅读量:6308 次
发布时间:2019-06-22

本文共 827 字,大约阅读时间需要 2 分钟。

一颗树,选取不相邻的点,求最大点权值

因为当前结点选或不选后后效性,所以我们加一唯来取消后效性

f[0][i]表示以i为根的树且i不选的最大价值

f[1][i]表示以i为根的树且i选的最大价值

显然有

f[1][i] = sum(f[0][son])

f[0][i] = sum(max(f[0][son], f[1][son]))

#include
#include
#include
#define REP(i, a, b) for(int i = (a); i < (b); i++)using namespace std;const int MAXN = 6123;int f[2][MAXN], a[MAXN], b[MAXN], n;vector
g[MAXN];void dfs(int u){ f[0][u] = 0; f[1][u] = a[u]; if(!g[u].size()) return; REP(i, 0, g[u].size()) { int v = g[u][i]; dfs(v); f[1][u] += f[0][v]; f[0][u] += max(f[0][v], f[1][v]); }}int main(){ scanf("%d", &n); REP(i, 1, n + 1) scanf("%d", &a[i]); int fa, son; while(~scanf("%d%d", &son, &fa) && fa) { g[fa].push_back(son); b[son] = 1; } REP(i, 1, n + 1) if(!b[i]) { dfs(i); printf("%d\n", max(f[0][i], f[1][i])); break; } return 0; }

 

转载于:https://www.cnblogs.com/sugewud/p/9819394.html

你可能感兴趣的文章
Box2D自定义重力
查看>>
chpasswd
查看>>
mysqldump --single-transaction 和--lock-tables参数详解
查看>>
android 数据库_sql语句总结
查看>>
python购物车
查看>>
解决python2和python3的pip冲突
查看>>
面试/编程
查看>>
linux每日命令(16):head命令
查看>>
公司内部分享【富有成效的每日站会】总结
查看>>
打造一个上传图片到图床利器的插件(Mac版 开源)
查看>>
iOS横竖屏
查看>>
thinkphp判断更新是否成功
查看>>
Do While ... Loop 与 Do Until ... Loop 的区别
查看>>
【Linux】查询某个字符串出现次数
查看>>
高效使用jquery之一:请使用'On'函数
查看>>
冲刺第一周第三天
查看>>
ERP环境检测工具设计与实现 Environment Detection
查看>>
不要在构造中做太多事情,不然有时候会出现有意思的代码~
查看>>
IIS 发布网站遇到的问题
查看>>
NuGet学习笔记(2)——使用图形化界面打包自己的类库
查看>>