树形DP(例题)】的更多相关文章

2015年蓝桥杯第十题--生命之树(无根树dfs) ①暴力解法:枚举子集(选点) + dfs判断连通性(题目要求连通)满足上面两个条件下找出最大值权值和 ②dfs无根树转有根树,递归找最优 先学习无根树转有根树 参考博客:https://blog.csdn.net/Originum/article/details/82258450 参考博客:https://www.cnblogs.com/yspworld/p/4270876.html 无根树转有根树模板 void dfs(int cur, in…
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7337179.html 树形DP是一种在树上进行的DP相对比较难的DP题型.由于状态的定义多种多样,因此解法也五花八门,经常成为高水平考试的考点之一. 在树形DP的问题中,有这样一类问题:其数据范围相对较小,并且状态转移一般与两两节点之间的某些关系有关. 今天,我们就来研究一下这类型的问题,并且总结一种(相对套路的)解决大多数类型题的思路. 首先,我们用一道相对简单的例题来初步了解这个类型题的大致思路,以及一…
树形dp出了应该还是比计数dp要简单的 因为很好可以看出来 常用的是一个F记录子树内的 一个G记录子树外的 还有一种就是有环的做过要用状压搞一下 不说这么多直接上例题 [HAOI2015]T1 经典的树形dp 这个转移有点难想 比较不常规 通常树形dp都是几乎是O(1)转移的 这个转移是N的 所有总的时间复杂度是N^2的  等等讲细一点 首先我们可以染k个点 第一个想的就是F[i][k]表示第i个点为子树可以染k个点 然后的话就从下往上维护 这个好像有点经典 维护的方法 第一次接触有点难 它的维…
通过两道简单的例题,我们来重新认识树形DP. 战略游戏(luoguP1026) Description Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题.他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路.注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到. 请你编一程序,给定一树,帮Bob计算出他需要放置最少的士兵. Input Format 输入文件中数据表示一棵树,描述如下…
树形DP入门 有些时候,我们需要在树形结构上进行动态规划来求解最优解. 例如,给定一颗\(N\)个节点的树(通常是无根树,即有\(N-1\)条无向边),我们可以选择任意节点作为根节点从而定义出每一颗子树的深度,形成一个子问题重叠的结构,是符合动态规划前提的.在设计动态规划算法时,一般由节点由深到浅的顺序来作为\(DP\)的阶段.\(DP\)的状态表示中,数组的第一维通常表示子树根节点的编号.大多数时候,我们用递归的形式实现树形动态规划.先在它的每个子节点上递归求出最优解,再在返回时求解当前节点的…
今天学了树形dp,发现树形dp就是入门难一些,于是好心的我便立志要发一篇树形dp入门的博客了. 树形dp的概念什么的,相信大家都已经明白,这里就不再多说.直接上例题. 一.常规树形DP P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri,但是呢,如果某个职员的上司来参加舞会了,那么这个职员就无论如何也不肯来参加舞会了.所以…
[BZOJ1040][ZJOI2008]骑士 Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在和平环境中安逸了数百年的Z国又怎能抵挡的住Y国的军队.于是人们把所有的希望都寄托在了骑士团的身上,就像期待有一个真龙天子的降生,带领正义打败邪恶.骑士团是肯定具有打败邪恶势力的能力的,但是骑士们互相之间往往有一些矛盾.每个骑士都有且仅有一个…
这几天,我自学了基础的树形DP,在此给大家分享一下我的心得.   首先,树形DP这种题主要就是解决有明确分层次且无环的树上动态规划的题.这种题型一般(注意只是基础.普通的情况下)用深度优先搜索来解决实际的DP部分,而且一般用记忆化搜索,因为树会有重复遍历节点的情况.在一棵树上针对普遍子树都满足根节点与两个子节点有特殊关系的,树形DP就应该是解决这道题的优选方法了.   讲完基础的定义,我们来讲几个挺有用的性质: 1.在一棵二叉树上,已知其中序遍历,它的任一个节点都可以成为它的根节点,对于每一个子…
5402 选课 0x50「动态规划」例题 描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了 N(N≤300) 门的选修课程,每个学生可选课程的数量 M 是给定的.学生选修了这 M 门课并考核通过就能获得相应的学分.在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其他的一些课程的基础上才能选修.例如<Windows程序设计>必须在选修了<Windows操作基础>之后才能选修.我们称<Windows操作基础&…
前言 \(DP\)这东西真的是博大精深啊...... 简介 树形\(DP\),顾名思义,就是在树上操作的\(DP\),一般可以用\(f_i\)表示以编号为\(i\)的节点为根的子树中的最优解. 转移的时候一般都将信息由子节点转移到父亲节点,也就是将信息从下往上转移. 因此,一般树形\(DP\)都会采用 递归 的形式. 典例1:树上背包 树形\(DP\)中有一种比较经典的题型:树上背包. 其实它的思想与普通背包差不多,关键在于它玄学的时间复杂度. 很多看似\(O(n^3)\)会\(T\)飞(实际上…
树形dp的状态转移分为两种,一种为从子节点到父节点,一种为父节点到子节点,下面主要讨论子节点到父亲节点的情况: 例题1(战略游戏): 这是一道典型的由子节点状态转移到父节点的问题,而且兄弟节点之间没有相互影响,我们用f[i][0]/f[i][1]表示i不取/要取时其所在子树总共最少取的节点数,不难得出dp方程: 代码: #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath>…
算是一个……复习以及进阶? 什么是树形dp 树形dp是一种奇妙的dp…… 它的一个重要拓展是和各种树形的数据结构结合,比如说在trie上.自动机上的dp. 而且有些时候还可以拓展到环加外向树.仙人掌上的酷炫操作. 好吧上面这些我都不会. 树形dp的例题 [简单dp]P2015 二叉苹果树 题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来描述一根树…
DP是我的弱项, 此专题意在总结树形DP的解题思路. 最小代价遍历一棵树 给定一棵带边权的树 $T=(V,E)$ , 遍历它 (树的每个节点都访问至少一次) 所需的最小代价. 这里的代价由具体问题所定义, 比如 最小移动距离 等. 树形背包 这是一类特殊的树上 整数规划 问题. 树形背包问题的一般形式为 给定有根树 $T=(V, E)$ , 在某种限制下, 最优化目标函数 $f \colon$ 满足某条件的 $T$ 的连通子图 $\to \mathbb{Z}$ 例题 HackerRank Wee…
题目:https://www.luogu.org/problemnew/show/P2634 今天刚学了点分治,做例题: 好不容易A了,结果发现自己写的是树形DP...(也不用找重心)(比点分治快) #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; ,inf=0x3f3f3f3…
今天学习了树形\(dp\),一开始浏览各大\(blog\),发现都\(TM\)是题,连个入门的\(blog\)都没有,体验极差.所以我立志要写一篇可以让初学树形\(dp\)的童鞋快速入门. 树形\(dp\) 概念类 树形\(dp\)是一种很优美的动态规划,真的很优美真的,前提是在你学会它之后. 实现形式 树形\(dp\)的主要实现形式是\(dfs\),在\(dfs\)中\(dp\),主要的实现形式是\(dp[i][j][0/1]\),\(i\)是以\(i\)为根的子树,\(j\)是表示在以\(i…
一.概念 1.什么是树型动态规划 树型动态规划就是在“树”的数据结构上的动态规划,平时作的动态规划都是线性的或者是建立在图上的,线性的动态规划有二种方向既向前和向后,相应的线性的动态规划有二种方法既顺推与逆推,而树型动态规划是建立在树上的,所以也相应的有二个方向: 叶->根:在回溯的时候从叶子节点往上更新信息 根 - >叶:往往是在从叶往根dfs一遍之后(相当于预处理),再重新往下获取最后的答案. 不管是 从叶->根 还是 从 根 - >叶,两者都是根据需要采用,没有好坏高低之分.…
关于树形DP几道入门题目 今天恶补树形DP,感觉海星. 其实挺简单的. 介绍几道例题,我会的. 1.洛谷P1352 没有上司的舞会 我的一篇题解 我们可以考虑每一个节点都是有两种情况. 一个是被邀请:另一个是不会被邀请. 前者后果就是子节点不可以被选择: 后者结果就是子节点可以被选择. 于是关系明确,状态转移方程为: dp[root][0] += std::max(dp[son[root][i]][0],dp[son[root][i]][1]); dp[root][1] += dp[son[ro…
长链剖分 规定若\(x\)为叶结点,则\(len[x]=1\). 否则定义\(preferredchild[x]\)(以下简称\(pc[x]\),称\(pc[x]\)为\(x\)的长儿子)为\(x\)的所有子结点\(ver\)中,\(len[ver]\)最大的一个.\(len[x]=len[pc[x]]+1\). 这里的\(pc[x]\)相当于树链剖分中的\(heavychild[x]\),类似地,我们可以认为整棵树被划分为了若干条互不相交的长链. 有什么用? 求LCA. 到底有什么用? 优化树…
前言:寒假讲过树形DP,这次再复习一下. -------------- 基本的树形DP 实现形式 树形DP的主要实现形式是$dfs$.这是因为树的特殊结构决定的——只有确定了儿子,才能决定父亲.划分阶段的话一般是$f[i][j][0/1]$.$i$表示以$i$为根的子树,$j$一般表示保留$j$个子节点,$0/1$表示选/不选这个节点.一般第三维可以省去. 基本的DP方程 选择节点类 $f[i][0]=f[j][1]$ $f[i][1]=max/min(f[j][0],f[j][1])$ 背包类…
树形DP学习笔记 ps: 本文内容与蓝书一致 树的重心 概念: 一颗树中的一个节点其最大子树的节点树最小 解法:对与每个节点求他儿子的\(size\) ,上方子树的节点个数为\(n-size_u\) ,求对于每个节点子树的最大值,找出最小的那个就好了; (我觉得就不需要code了) 树的直径 概念:一颗带权树的最长路径 解法:维护一个节点到叶子节点的最大距离\(d1[i]\)和次大距离\(d2[i]\) ,最大距离就是$max {d1[i]+d2[i] } $ code #include<ios…
蒟蒻大佬时隔三个月更新了!!拍手拍手 而且是更新了几篇关于DP的文章(RioTian狂喜) 现在赶紧学习和复习一下树形DP.... 树形DP基础:Here,CF上部分树形DP练习题:Here \[QAQ \] 在学习树形DP之前,我们先要搞清楚一个问题,什么是树?根据图论课上学到的知识我们知道,连通的无圈图称为树.而树我们可以把它近似第看成一个分形结构,这是说我们的树其实是可以递归定义的,树的每个子树也是一颗完整的树,而这种结构就天然地适合递归. 具体来说,在树形动态规划当中,我们一般先算子树再…
一.树形 DP 基础 又是一篇鸽了好久的文章--以下面这道题为例,介绍一下树形 DP 的一般过程. POJ 2342 Anniversary party 题目大意:有一家公司要举行一个聚会,一共有 \(n\) 个员工,其中上下级的关系通过树形给出.每个人都不想与自己的直接上级同时参加聚会.每个员工都有一个欢乐度,举办聚会的你需要确定邀请的员工集合,使得它们的欢乐度之和最大,并且没有一个受邀的员工需要与他的直接上级共同参加聚会.\(n\leq 6000\). Solution: 考虑一个子树往上转…
概念 应用 例题 最大独立子集 没有上司的晚会 题目描述 分析 树的重心 题目描述 分析 树的直径 概念 题目描述 分析 概念 给定一棵有N个节点的树(通常是无根树,也就是有N-1条无向边),我们可以任选一个节点为根节点,从而定义出每个节点的深度和每棵子树的根. 在树上设计动态规划算法时,一般就以节点从深到浅(子树从小到大)的顺序作为DP的"阶段".DP的状态表示中,第一维通常是节点编号(代表以该节点为根的子树).大多数时候,我们采用递归的方式实现树形动态规划.对于每个节点x,先递归在…
树形dp空间优化 介绍 有时题目会告诉我们n叉树的最大层数,或者给出一个完全n叉树树,直接做树形dp会爆空间时,就可以用这个优化方法. 多数树形dp都是先dfs到子树,再合并到根上,显然当合并到根上时子树的信息没有意义了,这就浪费了空间. 举个例子: 一般的解法会用f[i(1~5)] 但在合并到2后,f[3] f[4]没用了,这时我们就可以用这些空间存5的信息. 实现 定义dfn,注意这里的dfn与dfs需有区别. 以下手动模拟dfs 当前点 dfn 1          1 2       …
Network Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 4478   Accepted: 1292 Description Yixght is a manager of the company called SzqNetwork(SN). Now she's very worried because she has just received a bad news which denotes that DxtNet…
可以发现这道题的数据范围有些奇怪,为毛n辣么大,而k只有10 我们从树形dp的角度来考虑这个问题. 如果我们设f[x][k]表示与x距离为k的点的数量,那么我们可以O(1)回答一个询问 可是这样的话dp貌似就比较麻烦了. 我们考虑一般树形dp都是怎样的,一般的树形dp,都是因为子树上的f值可以无后效的转移到根节点上,并且子树的f值与父亲无关,如果我们按照上述定义,那么就会发现这需要两遍dfs来解决,并且细节不少. 但是两遍dfs我并不会QAQ 所以我们考虑转换一种定义,设f[x][k]表示在以x…
4726: [POI2017]Sabota? Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 128  Solved: 49[Submit][Status][Discuss] Description 某个公司有n个人, 上下级关系构成了一个有根树.其中有个人是叛徒(这个人不知道是谁).对于一个人, 如果他下属(直接或者间接, 不包括他自己)中叛徒占的比例超过x,那么这个人也会变成叛徒,并且他的所有下属都会变成叛徒…
题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不考虑i点时子树的最优权值和,即(j是i的儿子),显然dp[i]>=sum[i].那么问题是考虑i点时dp[i]的值是多少,假设有一条链通过i,且端点a和b都在i的子树里,即LCA(a,b)=i,如果考虑加上这条链的权值,那么a->i, b->i的路上的点v都不能有链经过它们(题目要求链不相交…
切题ing!!!!! HDU  2196 Anniversary party 经典树形DP,以前写的太搓了,终于学会简单写法了.... #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <map> #include <queue> #include <set>…
给出一个n节点的无向树,每条边都有一个边权,给出m个询问,每个询问询问ki个点,问切掉一些边后使得这些顶点无法与顶点1连接.最少的边权和是多少.(n<=250000,sigma(ki)<=500000) 考虑树形DP,我们令mn[i]表示i节点无法与1节点相连切除的最小权值.显然有mn[i]=min(E(fa,i),mn[fa]).大致就是i到1的简单路径上的最小边.我们对于每个询问.把询问的点不妨称为关键点.令dp[i]表示i节点不能与子树的关键点连接切掉的最小权值.那么有,如果son[i]…