树形DP

入门模板题 poj P2342

  大意就是一群职员之间有上下级关系,每个职员有一个快乐值,但是只有在他的直接上级不在场的情况下才会快乐。求举行一场聚会的快乐值之和的最大值。

求解

  声明一个数组,f[i][j]。f[i][0]表示不邀请第i个员工时,该员工子树上的最大快乐值之和。f[i][1]则表示邀请时子树的最大快乐值之和。

#include <cstdio>
#include <cstring>
#include <vector>
#define MAX_N 6000
using namespace std; int n;
int fa[MAX_N+]; //该员工的上级
int f[MAX_N+][]; //f[i][0]不邀请该员工,该节点子树上的的最大快乐值 vector<int> G[MAX_N+]; //建图 记录该员工的下级
int root=; inline int max(int a,int b){
return a>b?a:b;
} void dfs(int root){
for (int i=;i<G[root].size();i++)
dfs(G[root][i]);
for (int i=;i<G[root].size();i++){
f[root][]+=max(f[G[root][i]][],f[G[root][i]][]);
f[root][]+=f[G[root][i]][];
}
}
int main(){
// freopen("test1.in","r",stdin);
memset(fa,-,sizeof(fa));
scanf("%d",&n);
for (int i=;i<=n;i++)
scanf("%d",&f[i][]);
int father,so;
while (scanf("%d%d",&so,&father)&&father&&so){ //建图
G[father].push_back(so);
fa[so]=father;
}
while (fa[root]!=-) root=fa[root]; //找到根节点
dfs(root);
printf("%d",max(f[root][],f[root][]));
return ;
}

[参考《挑战程序设计》第二版及网上资料]

树形DP学习笔记的更多相关文章

  1. 树形DP 学习笔记

    树形DP学习笔记 ps: 本文内容与蓝书一致 树的重心 概念: 一颗树中的一个节点其最大子树的节点树最小 解法:对与每个节点求他儿子的\(size\) ,上方子树的节点个数为\(n-size_u\) ...

  2. 树形$dp$学习笔记

    今天学习了树形\(dp\),一开始浏览各大\(blog\),发现都\(TM\)是题,连个入门的\(blog\)都没有,体验极差.所以我立志要写一篇可以让初学树形\(dp\)的童鞋快速入门. 树形\(d ...

  3. 树形DP 学习笔记(树形DP、树的直径、树的重心)

    前言:寒假讲过树形DP,这次再复习一下. -------------- 基本的树形DP 实现形式 树形DP的主要实现形式是$dfs$.这是因为树的特殊结构决定的——只有确定了儿子,才能决定父亲.划分阶 ...

  4. 数位DP学习笔记

    数位DP学习笔记 什么是数位DP? 数位DP比较经典的题目是在数字Li和Ri之间求有多少个满足X性质的数,显然对于所有的题目都可以这样得到一些暴力的分数 我们称之为朴素算法: for(int i=l_ ...

  5. DP学习笔记

    DP学习笔记 可是记下来有什么用呢?我又不会 笨蛋你以后就会了 完全背包问题 先理解初始的DP方程: void solve() { for(int i=0;i<;i++) for(int j=0 ...

  6. [总结] 动态DP学习笔记

    学习了一下动态DP 问题的来源: 给定一棵 \(n\) 个节点的树,点有点权,有 \(m\) 次修改单点点权的操作,回答每次操作之后的最大带权独立集大小. 首先一个显然的 \(O(nm)\) 的做法就 ...

  7. 树形dp学习

    学习博客:https://www.cnblogs.com/qq936584671/p/10274268.html 树的性质:n个点,n-1条边,任意两个点之间只存在一条路径,可以人为设置根节点,对于任 ...

  8. 动态dp学习笔记

    我们经常会遇到一些问题,是一些dp的模型,但是加上了什么待修改强制在线之类的,十分毒瘤,如果能有一个模式化的东西解决这类问题就会非常好. 给定一棵n个点的树,点带点权. 有m次操作,每次操作给定x,y ...

  9. 斜率优化DP学习笔记

    先摆上学习的文章: orzzz:斜率优化dp学习 Accept:斜率优化DP 感谢dalao们的讲解,还是十分清晰的 斜率优化$DP$的本质是,通过转移的一些性质,避免枚举地得到最优转移 经典题:HD ...

随机推荐

  1. 安装bcmath 扩展

    1.在php源码包中,默认就包含bcmath扩展的安装文件,只需手动安装一下即可 cd /root/build2/php-/ext/bcmath // 进入PHP的源码包目录中的bcmatch扩展目录 ...

  2. App启动页设计实例与技巧

    App启动页,也称闪屏页,最初是为缓解用户等待Web/iOS/Android App数据加载的焦虑情绪而出现,后被设计师巧妙用于品牌文化展示,服务特色介绍以及功能界面熟悉等平台进行设计,被赋予了更加丰 ...

  3. DataStage 错误集(持续更新)

    DataStage 错误集(持续更新) DataStage序列文章 DataStage 一.安装 DataStage 二.InfoSphere Information Server进程的启动和停止 D ...

  4. centos环境下创建数据库和表的方法

    centos环境下创建数据库和表的方法 //查询数据库的命令: mysql> SHOW DATABASES; +--------------------+ | Database         ...

  5. 8 求s=a+aa+aaa+aaaa+aa...a的值

    题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字. * 例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制.程序分析:关键是计算出每一项的 ...

  6. BZOJ 4326 NOIP2015 运输计划 (二分+树上差分)

    4326: NOIP2015 运输计划 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1930  Solved: 1231[Submit][Statu ...

  7. 编译hadoop的libhdfs.a

    进入hadoop-hdfs-project/hadoop-hdfs/src目录,执行cmake以生成Makefile文件. 如果遇到如下的错误: ~/hadoop-2.7.1-src/hadoop-h ...

  8. Log4Net配置使用简记

    1,引用Log4Net.dll .当前为2.0.8.0版,可添加Nuget包.我的办法是从下载的包中直接引用相应.net版本的dll以减小项目体积 2,在App.config中增加<sectio ...

  9. DELPHI移动端支付宝支付

    Delphi XE7 Android 应用接入支付宝SDK的方法 1      应用场景和准备工作: 采用XE系列开发的android apps. apps中需要集成支付宝的支付能力. 支付到指定的商 ...

  10. 博客和Github简单练习

    我的第一篇博客 1.首先是自我介绍 姓名:孙弘毅 班级:网工142 学号:1413042050 兴趣:游戏,看书 至于我写了多少代码我也不清楚,反正不多 2.Github  注册流程 (1)百度Git ...