根据最近做的几道树形dp题总结一下规律。(从这篇往前到洛谷 P1352 )

这几道题都是在一颗树上,然后要让整棵树的节点或边

满足一种状态。然后点可以影响到相邻点的这种状态

然后求最小次数

那么要从两个维度来设计状态

第一个维度

(1)以i为根的树的所有节点都满足这种状态

(2)以i为根的树的只有i不满足这种状态

第二个维度

(1)i这个点取

(2)i这个点不取

所以就会有四种状态,不过最近几道题都是直接pass掉了其中一种

只有三种状态。

状态设计好了就很好写转移方程了,记住转移的过程中孩子一定

要都满足状态,这样做下来才可以使得整棵树满足状态。


然后我们把这个模型套到这道题

第一个维度

亮表示以i为根的子树全部节点都亮

不亮表示以i为根的子树只有i不亮

第二个维度

i这个灯泡开或者不开

所以状态是

(1)f[i][0] 没开,亮

(2)f[i][1] 没开,没亮

(3)f[i][2] 开,亮

(4)f[i][3] 开,没亮

这里f[i][3]pass掉,因为你要把没亮变成亮需要根节点按按钮,

此时跟节点消耗一个操作,而孩子自己又消耗一个操作

如果是开,亮的话只用消耗孩子一个操作。

现在写状态转移方程

u表示根节点,v表示孩子

f[u][2] = sum(f[v][1])

这时跟节点一开就都亮了(f[u][2]一开始会初始化为1)

f[u][0] = sum(min(f[v][0], f[v][2]))

f[u][1] = sum(min(f[v][0], f[v][2]))

这里有个奇偶数的问题,令sum = sum(min(f[v][0], f[v][2]))

不仅要算出sum

然后还要算出以最小花费把其中一个min换成另外一个操作的值,即sum + mint

假设f[v][2]是奇数,意味着当前是亮的,所以f[u][1] = sum + mint,f[u][0] = sum   

如果是偶数,就反过来,f[u][1] = sum,f[u][0] = sum + mint

这里有小细节,到叶子结点的时候,f[u][0]是不可能的(不考虑父亲)

那么这时按照程序f[u][0]会等于无穷大,所以相当于不可能

1113: [视频]树形动态规划(TreeDP)8:树(tree)(树形dp状态设计总结)的更多相关文章

  1. caioj 1111 树形动态规划(TreeDP)6: 皇宫看守 (状态设计)

    这道题的难点在于状态怎么设计 这道题要求全部都是安全的,所以我们做的时候自底向上每一个结点都要是安全的 结合前一题当前结点选和不选,我们可以分出四种情况出来 选 安全 选 不安全 不选 安全 不选 不 ...

  2. 树形动态规划(树状DP)小结

    树状动态规划定义 之所以这样命名树规,是因为树形DP的这一特殊性:没有环,dfs是不会重复,而且具有明显而又严格的层数关系.利用这一特性,我们可以很清晰地根据题目写出一个在树(型结构)上的记忆化搜索的 ...

  3. js实现树级递归,通过js生成tree树形菜单(递归算法)

    方法封装: /** * 数据转换为树形(递归),示例:toTreeByRecursion(source, 'id', 'parentId', null, 'children') * @param {A ...

  4. 蓝桥杯 ALGO-4 结点选择 (树形动态规划)

    问题描述 有一棵 n 个节点的树,树上每个节点都有一个正整数权值.如果一个点被选择了,那么在树上和它相邻的点都不能被选择.求选出的点的权值和最大是多少? 输入格式 第一行包含一个整数 n . 接下来的 ...

  5. 轻量级jquery框架之--树(tree)

    前言 在常用的UI组件中,树形组件与数据列表组件可以说是构成一个管理平台基本的两大数据核心组件.树形组件用于系统菜单,数据列表用于数据表现,两者配合即可完成一个简单的数据系统.要实现一个支持复选.工具 ...

  6. vue+element-ui之tree树形控件有关子节点和父节点之间的各种选中关系详解

    做后端管理系统,永远是最蛋疼.最复杂也最欠揍的事情,也永远是前端开发人员最苦逼.最无奈也最尿性的时刻.蛋疼的是需求变幻无穷,如同二师兄的三十六般变化:复杂的是开发难度寸步难行,如同蜀道难,难于上青天: ...

  7. elementUI Tree 树形控件--官方文档

    一.基础用法基础的树形结构展示,props相当于一个对实体类对像 <template> <el-tree :data="data" :props="de ...

  8. CF 463A && 463B 贪心 && 463C 霍夫曼树 && 463D 树形dp && 463E 线段树

    http://codeforces.com/contest/462 A:Appleman and Easy Task 要求是否全部的字符都挨着偶数个'o' #include <cstdio> ...

  9. 图论&动态规划:虚树

    虚树可以看做是对树形动态规划的一种求解优化 对于需要求答案的点p,只保留对答案有影响的节点,从而减少时间 BZOJ2286 dp[i]=min(val[i],Σdp[j](j为i的儿子)),val[i ...

随机推荐

  1. node——由新闻列表跳转到新闻详情页

    当我们在浏览新闻列表页面的时候,想要看感兴趣的新闻内容,需要到详情页面去查看内容. 在之前写好了新闻列表页面,现在需要做列表页面到详情页面的跳转,需要考虑一下问题 1.点击新闻列表某一项跳转到详情页面 ...

  2. 多个账号GitHub账号配置

    1.vi config 重复以上步骤就行 然后#注释下  是个人账号还是公司用的账号 mv id_rsa   id_rsa_qq   做下区别,防止冲突 ,别忘了,路径也要改下 mv   id_rsa ...

  3. 【XSY2988】取石子

    题目来源:NOI2018模拟测试赛(二十六) 题解: 设a<b: 可以先考虑a=1的特殊情况,注意到后手的最优策略是跟着另外一个人取,取到最后剩余不到$a+b$时再看奇偶性: 那么很容易想到把所 ...

  4. Vue学习之路第二篇:插值表达式

    要开始写Vue的功能了,是不是很激动呢!开始吧! 1.首先建立一个html页面,导入Vue js包 <script type="text/javascript" src=&q ...

  5. BZOJ 5020 [THUWC2017]Drown in the math ocean (LCT+求导)

    题目大意: 太长了略 洛谷题面传送门 嗯,数学题 感觉考试要是出这种题我就死翘翘了[逃 不用想都知道要$LCT$维护断边连边,但询问该如何处理呢 利用题目给出的公式 $f(x)=\sum_{i=0}^ ...

  6. STM32 Cubemx 输出可调频率与占空比的PWM

    这里就不对STM32的PWM进行讲解了,想要了解的可以百度一下,这里主要说怎么实现. 1.建立工程,我选的是STM32F103zet6芯片,选择定时器的PWM功能 2.配置时钟,我这里配的是内部时钟, ...

  7. vue懒加载实现

  8. input输入框获取焦点是背景黄色去除

    input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset !important;}

  9. 【codeforces 229C】Triangles

    [题目链接]:http://codeforces.com/problemset/problem/229/C [题意] 给你一张完全图; 然后1个人从中选择m条边; 然后另外一个人从中选择剩余的n*(n ...

  10. Jquery_Validate 表单校验的使用

    一.效果图: 二.JqueryValidate的好处 在做注册.或者类似以上的表单提交的时候,大家是不是都很烦那种,把数据拿到后台去判断, 可能经过了正则表达式之类的复杂判断,然后发现数据错误.接着通 ...