树形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. oracle存储过程和游标参考

    oracle open cursor forhttp://www.itpub.net/thread-1874683-1-1.html

  2. 利用NotePad++ 格式化代码(格式标准化) worldsing

    在阅读别人的代码时往往会遇到格式很乱,阅读起来很费劲,如果手动改很容易出错,而且很费时间,这时可以借助一些专业的编辑器来格式化代码,NotePad++是一个轻量级的代码编辑器,占用内存少,运行速度快, ...

  3. Python中ndarray数组切片问题a[-n -x:-y]

    先看看如下代码: >>a=np.arange(10)>>a array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])>>a[-7:] array( ...

  4. 共享keychain数据

    [共享keychain数据] 当往keychain中插入数据时,默认的 kSecAttrAccessGroup 就是App自身的BundleID. [官方文档] You can add a keych ...

  5. Workflow笔记2——状态机工作流(转)

    出处:http://www.cnblogs.com/jiekzou/p/6192813.html 在上一节Workflow笔记1——工作流介绍中,介绍的是流程图工作流,后来微软又推出了状态机工作流,它 ...

  6. SSM的项目框架

  7. IO 之 InputStream 和 Reader

    package java.io; // Representing an input stream of bytes. public abstract class InputStream impleme ...

  8. 看图说说JVM老年代垃圾收集器

    注:G1垃圾收集器是目前最前沿的GC收集器,未来将取代CMS垃圾收集器,可以作为整个Heap的收集器使用,不限于老年代!!!

  9. JUnit4简易教程

    1.下载JUnit4的jar包,在项目上右键选properties->Java Build Path ->Libraries->Add library添加刚才的jar包 2.在项目中 ...

  10. Reverting back to the R12.1.1 and R12.1.3 Homepage Layout

    Reverting back to the 12.1.1 Homepage Layout Set the following profiles: FND: Applications Navigator ...