动态规划:树形DP
典型例题有三道:
没有上司的舞会
选课
景点中心
我们可以把动态规划的状态和转移描述成DAG
对于有根树来说,如果我们规定边的方向由父节点指向叶子节点
或者是由叶子节点指向父节点(奇葩)
那么它也是一个DAG
如果状态和转移都发生在特殊的DAG,树上
叫做树形动态规划
在树规中,父节点的值通过所有子节点计算完毕之后得出
这里上晚会
1A还是很舒服的,毕竟以前敲得很熟了
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
const int maxm=;
int n;
int r[maxn],vis[maxn],f[maxn][];
int cnt;
int g[maxn];
struct Edge{int t,next;}e[maxm];
void addedge(int u,int v)
{
cnt++;
e[cnt].t=v;
e[cnt].next=g[u];
g[u]=cnt;
}
void dfs(int id)
{
f[id][]=r[id];
if(g[id]==) return;
//如果这是一个叶子,就到头了,我可是先赋值了给爹爹们用的哦
for(int tmp=g[id];tmp;tmp=e[tmp].next)
{
dfs(e[tmp].t);
f[id][]+=f[e[tmp].t][];
//选id则id的所有儿子全部GG
if(f[e[tmp].t][]>f[e[tmp].t][]) //如果不选id,要看儿子们是选好还是不选好
f[id][]+=f[e[tmp].t][];
else f[id][]+=f[e[tmp].t][];
}
}
int main()
{
int x,y;
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&r[i]);
for(int i=;i<n;i++)
{
scanf("%d%d",&x,&y);
addedge(y,x); //由BOSS指向员工这样遍历起来好处理
vis[x]=; //标记这个不是根,只有BOSS上面没人
}
for(int i=;i<=n;i++)
if(!vis[i])
{
dfs(i);
printf("%d",max(f[i][],f[i][]));
break;
}
return ;
}
动态规划:树形DP的更多相关文章
- 动态规划——树形dp
动态规划作为一种求解最优方案的思想,和递归.二分.贪心等基础的思想一样,其实都融入到了很多数论.图论.数据结构等具体的算法当中,那么这篇文章,我们就讨论将图论中的树结构和动态规划的结合——树形dp. ...
- UOJ#290. 【ZJOI2017】仙人掌 仙人掌,Tarjan,计数,动态规划,树形dp,递推
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ290.html 题解 真是一道好题! 首先,如果不是仙人掌直接输出 0 . 否则,显然先把环上的边删光. ...
- 树形DP——动态规划与数据结构的结合,在树上做DP
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法与数据结构的第15篇,也是动态规划系列的第4篇. 之前的几篇文章当中一直在聊背包问题,不知道大家有没有觉得有些腻味了.虽然经典的文 ...
- 【动态规划】树形DP完全详解!
蒟蒻大佬时隔三个月更新了!!拍手拍手 而且是更新了几篇关于DP的文章(RioTian狂喜) 现在赶紧学习和复习一下树形DP.... 树形DP基础:Here,CF上部分树形DP练习题:Here \[QA ...
- 动态规划(树形DP):LNOI 2016 侦察守卫
Sample Input 12 2 8 9 12 6 1 1 5 1 4 8 10 6 10 1 2 3 5 6 7 8 9 10 11 1 3 2 3 3 4 4 5 4 6 4 7 7 8 8 9 ...
- 动态规划(树形DP):HDU 5834 Magic boy Bi Luo with his excited tree
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA8UAAAJbCAIAAABCS6G8AAAgAElEQVR4nOy9fXQcxZ0uXH/hc8i5N+
- 树形动态规划(树形DP)入门问题—初探 & 训练
树形DP入门 poj 2342 Anniversary party 先来个题入门一下~ 题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上 ...
- 选课 ( dp 树形dp 动态规划 树规)
和某篇随笔重了?!!?!?!?!?!?不管了留着吧 题目: 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之 ...
- 动态规划专题(二)——树形DP
前言 \(DP\)这东西真的是博大精深啊...... 简介 树形\(DP\),顾名思义,就是在树上操作的\(DP\),一般可以用\(f_i\)表示以编号为\(i\)的节点为根的子树中的最优解. 转移的 ...
- 1113: [视频]树形动态规划(TreeDP)8:树(tree)(树形dp状态设计总结)
根据最近做的几道树形dp题总结一下规律.(从这篇往前到洛谷 P1352 ) 这几道题都是在一颗树上,然后要让整棵树的节点或边 满足一种状态.然后点可以影响到相邻点的这种状态 然后求最小次数 那么要从两 ...
随机推荐
- 关于 js 对象 转 字符串 和 深拷贝 的探讨
随着更多语言的支持 **json** 作为数据传输和存储的媒体,已经非常成熟且应用广泛.却存在致命硬伤,不携带 **对象方法** .在数据传输和存储中,这是恰当的和合理的. 但是在更多的应用场景中,又 ...
- SQL Server中2008及以上 ldf 文件过大的解决方法
在SQL Server中经常遇到事务日志变大的情况,除了将数据库设置为“自动收缩”外,还可以使用下面的SQL命令进行快速清除数据库中的事务日志,命令如下: - 第一步:清空日志 ALTER DAT ...
- Hive数据倾斜和解决办法
转自:https://blog.csdn.net/xinzhi8/article/details/71455883 操作: 关键词 情形 后果 Join 其中一个表较小,但是key集中 ...
- awk用法介绍
Awk 程序的结构如下: awk 'BEGIN{ print "start" } pattern { commands } END{ print "end" } ...
- 在Linux下通过rpm打包发布Java程序
这个东西涉及的内容较多,根据下面这些文章慢慢学习 一个简单的例子 http://blog.csdn.net/king_on/article/details/7169384 按照文章中的步骤来,打包之后 ...
- formValidator 不支持jquery1.9以上的解决办法
不支持的原因是因为jquery1.9以上版本剔除了$.browser 在formValidator 源码最顶层.或者jquery源码里加上如下代码 $.browser = {};$.browser.m ...
- python接口测试(一)——http请求及token获取
使用python对当前的接口进行简单的测试 1.接口测试是针对软件对外提供服务得接口得输入输出进行得测试,验证接口功能与接口描述文档得一致性 返回结果可以为字符串,json,xml等 2.接口的请求方 ...
- 西门子S7-200 SMART在win10环境下,使用虚拟机进行网络通信问题一二
原来的笔记本光荣退休,新买了小米笔记本17150.有个项目需要使用西门子S7-200 SMART,结果碰到了很多悲催的事情,新系统下的各种问题. 先贴下计算机配置,如下: 阶段一:安装问题 (1)在w ...
- 剑指offer-二进制中1的个数11
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. class Solution: def NumberOf1(self, n): # write code here coun ...
- [Node] Agenda 中文文档 定时任务调度系统[基础篇]
Agenda简介 使用步骤概述 步骤详述 初始化 定义任务 参数说明: 配置任务 参数说明 设置监听 注意事项 Agenda简介 Agenda是一个定时任务管理模块,它将node中的定时任务存储在数据 ...