树形dp
C202044zxy
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[HAOI2015] 树上染色
这么水的省选题,我直接一眼切?一、题目点此看题二、解法树形背包是很显然的呀,但是距离似乎不那么好算。点对距离不好算我们就算边的贡献嘛,这不是常考套路么?那么一条边的贡献是:上面的黑点数×\times×下面的黑点数+++上面的白点数×\times×下面的白点数。还是树形 dpdpdp,设 dp[i][j]dp[i][j]dp[i][j] 为子树 iii 中选了 jjj 个黑点的最大贡献,转移就是裸的背好,回溯是记得计算一下他连向父亲的那条边的贡献即可。类似的复杂度证明 O(n2)O(n^2)O(n原创 2020-11-25 09:43:35 · 365 阅读 · 0 评论 -
[unknown OJ] 小A的树
一、题目点此看题二、解法明显的定义是 dp[u][x][y]dp[u][x][y]dp[u][x][y] 表示点 uuu 子树内选了 xxx 个点,yyy 个是黑点的联通子图能不能达到,但是状态就爆了,显然不行。需要猜结论:如果 xxx 个点的最小黑点数是 lll,最大黑点数是 rrr,那么黑点 [l,r][l,r][l,r] 的联通子图都存在。证明:我们增加黑点的方式是增加一个点在删一个点,此时黑点变化数最多为111,所以黑点函数可以视为在整点处连续变化,所以 [l,r][l,r][l,r] 个数原创 2020-11-23 16:08:03 · 210 阅读 · 0 评论 -
CF1394D Boboniu and Jianghu
一、题目点此看题二、解法我们把边定向,如果a[u]>a[v]a[u]>a[v]a[u]>a[v],那么我们就把边定向成v−>uv->uv−>u知道了这一点后考虑dpdpdp,我们需要解决的情况是a[u]=a[v]a[u]=a[v]a[u]=a[v]就不能直接定向,设dp[u][0/1]dp[u][0/1]dp[u][0/1]为uuu到父亲的边连入///连出...原创 2020-10-16 20:53:43 · 231 阅读 · 0 评论 -
CF1389G Directing Edges
一、题目点此看题二、解法这个图很不舒服,如果想把它转化成舒服的结构-----树,那么我们就要考虑缩点。这个图的性质能不能缩点呢?怎么缩点呢?考虑缩成边双联通分量,我们就可以把这个部分设置成互相可到达的有向图,利用的性质就是边双任意两点之间有两条经过边完全不同的路径。转化成树之后,对于这种规划问题我们考虑树形dpdpdp,设f[i]f[i]f[i]为iii子树内所有所有特殊点到iii的最大收益,如果我们把某一条边加上,那么可以获得f[v]f[v]f[v]的贡献,初始可以获得当前点上的收益a[u]a[原创 2020-10-11 14:47:30 · 230 阅读 · 0 评论 -
玩个树
一、题目二、解法首先可以感知一个结论:最优决策下翻转路径两两不交(好想,好理解,好证)一般都是树dpdpdp了,可以根据数据范围设计dpdpdp状态,设dp[i][0/1]dp[i][0/1]dp[i][0/1]为不留///留一条链给父亲去处理,主要是转移,如果你不想讨论的话可以先枚举确定d=2d=2d=2的边,然后就好写很多,蒟蒻作者就用这个加链拿了808080分。详细讲一下正解如何转移,先重新定义边权为c⊕dc\oplus dc⊕d,为000不翻转,111需要翻转,2,32,32,3无所谓原创 2020-08-26 20:01:03 · 185 阅读 · 1 评论 -
CF735E Ostap and Tree
一、题目点此看题二、解法原创 2020-08-08 13:56:38 · 206 阅读 · 0 评论 -
CF815C Karen and Supermarket
一、题目点此看题二、解法首先可以把树建出来,由于价格范围太大,所以把物品个数加进状态中,设dp[u][i][0/1]dp[u][i][0/1]dp[u][i][0/1]为uuu为根的子树内,买了iii件物品,uuu有没有被买(能不能用优惠券)的最小花费,转移相当于一个背包,特别注意能用劵的情况下可以让子树不用劵。咋一看这样做的时间复杂度是O(n3)O(n^3)O(n3)的,考虑一种常用的树上复杂度计算方式,由于没对点只会在lcalcalca处被计算一次,所以时间复杂度是O(n2)O(n^2)O(n2原创 2020-07-31 09:45:13 · 202 阅读 · 0 评论 -
CF629E Famil Door and Roads
一、题目点此看题二、解法关键在于讨论lcalcalca在哪儿:原创 2020-07-31 08:25:09 · 185 阅读 · 0 评论 -
CF1032F Vasya and Maximum Matching
一、题目点此看题二、解法最大匹配只有一种的条件是必须完美匹配或者是孤点。设dp[u][0/1/2]dp[u][0/1/2]dp[u][0/1/2]为uuu是孤点/u/u/u的匹配要交给父亲解决/u/u/u子树内已经解决好问题,转移:dp[u][0]=dp[u][0]×(dp[v][0]+dp[v][2])dp[u][0]=dp[u][0]\times(dp[v][0]+dp[v][2])dp[u][0]=dp[u][0]×(dp[v][0]+dp[v][2])dp[u][1]=dp[u][0]原创 2020-07-31 08:15:26 · 238 阅读 · 0 评论 -
CF960E Alternating Tree
一、题目点此看题二、解法一开始想对于每个根统计其子树贡献,但是难。换一个角度,由于加法是相对独立的,于是考虑每个点的贡献。有向路径有点麻烦,我们来分类讨论:xxx子树内->xxx->xxx子树外(包括xxx)xxx子树内(包括xxx)->xxx->xxx的另一个子树xxx子树外->xxx->xxx的子树(包括xxx)第我们需要处理出:子树内的和它距离为偶数的点数fdfdfd,子树内和它距离为奇数的点数gdgdgd,子树外的和它距离为偶数的点数fufuf原创 2020-07-30 16:18:09 · 304 阅读 · 0 评论 -
CF935E Fafa and Ancient Mathematics
一、题目原创 2020-07-30 14:50:31 · 299 阅读 · 3 评论 -
CF1249F Maximum Weight Subset
一、题目点此看题原创 2020-07-30 09:05:12 · 192 阅读 · 0 评论 -
CF734E Anton and Tree
一、题目点此看题二、解法首先可以把相同的点缩在一起,这样树就变得黑白相间。缩点之后的染色可以层层染色(没有动图,自己脑补),假如一开始是个黑点,把它染成白的,就和周围的白点融为一体,再把这个整体染成黑的,又和周围黑的融为一体..................如此一来,每次扩展两个格子,那么答案就是直径+2+2+2懒得写并查集了,直接搞了个双dfsdfsdfs求直径,证明:https://www.cnblogs.com/handsome-zyc/p/11237529.html#include &原创 2020-07-29 21:12:27 · 212 阅读 · 0 评论 -
CF1223E Paint the Tree
一、题目点此看题二、解法我tmtmtm自己想出来了哈哈哈(跟标解的做法竟然一模一样?)题意转化应该很轻松吧,因为一种颜色只能染两次,所以对于一个点最多选其相连的kkk条边。然后就是套路了,设dp[u][0/1]dp[u][0/1]dp[u][0/1]为点uuu和它的子树选边,给不给父亲留一条返祖边(这个点选儿子方向的k−1k-1k−1或者kkk条边),转移有点意思,有两种转移方式:不选连向儿子的边,贡献是dp[v][0]dp[v][0]dp[v][0]选连向儿子的边,贡献是dp[v][1]+原创 2020-07-29 19:18:25 · 311 阅读 · 0 评论 -
CF486D Valid Sets
一、题目点此看题二、解法题目中要求最大点权与最小点权之差小于d,我们可以固定最大点权,这样判断点权的合法也方便,就容易算联通子图了。但是可能会算重,最大点权需要重新定义,如果点权相同需要比编号。算个数可以用树形dpdpdp,设dp[u]dp[u]dp[u]为以uuu为根,每个点权需要小于钦定点权,需要大于等于最大点权−d-d−d的联通子图方案数,转移:dp[u]=dp[u]+dp[u]×dp[v]dp[u]=dp[u]+dp[u]\times dp[v]dp[u]=dp[u]+dp[u]×dp[v]原创 2020-07-29 17:05:44 · 204 阅读 · 0 评论 -
[HDU 5909] Tree Cutting
一、题目点此看题题目描述给你一棵nnn个节点的树,每个节点都有一个小于mmm的权值,定义一棵子树的权值为所有节点的异或和,问权值为0..m−10..m−10..m−1的所有子树的个数。(这里子树的意思是联通子图)二、解法设dp[i][j]dp[i][j]dp[i][j]为第iii个点异或值为jjj的方案数,枚举子节点,转移如下:dp[u][k]=∑i⊕j=kdp[u][i]×dp[v][j]dp[u][k]=\sum_{i\oplus j=k}dp[u][i]\times dp[v][j]dp[原创 2020-06-09 16:54:14 · 196 阅读 · 0 评论 -
AT2435 舞踏会
一、题目点此看题二、解法把这个转化成树,大约就是这个样子:根就是答案,我们可以二分答案midmidmid,我们设每个点大于midmidmid需要的自由点个数(大于等于midmidmid的个数)f[i]f[i]f[i],转移就是三个儿子的最小的fff值之和。考虑一下初始化,如果当前的点是已经固定的,如果值小于midmidmid那么fff是infinfinf,否则为000;如果未固定fff值为111,不难看出这样的复杂度是O(n)O(n)O(n)但是答案好像没有单调性啊,比如如果值都是1e91e91原创 2020-05-09 16:36:59 · 184 阅读 · 0 评论 -
CF643E Bear and Destroying Subtrees
一、题目点此看题二、解法首先考虑一个朴素dpdpdp,设dp[i][j]dp[i][j]dp[i][j]为第iii个点的树深度不大于jjj的概率(方便转移,用的时候减一下就行了),转移就考虑当前这条边断不断裂,转移方程如下:dp[u][i]=∏dp[v][i−1]+12dp[u][i]=\prod\frac{dp[v][i-1]+1}{2}dp[u][i]=∏2dp[v][i−1]+1这...原创 2020-04-11 15:33:20 · 177 阅读 · 0 评论 -
[HNOI2015]实验比较
一、题目点此看题二、解法解决本题的最重要条件(虽然你可能没有发现):小 DDD 都最多只记住了某一张质量不比 XiX_iXi 好的另一张图片 KXiK_{X_i}KXi也就是说只要你把x=yx=yx=y并查集合并缩成一个点,然后把x<yx<yx<y当作父亲和儿子之间连边,最后的图一定是一个森林,里面的小结构就是树(当然要判掉环的情况)。...原创 2020-03-07 21:30:58 · 215 阅读 · 0 评论 -
[JSOI2008]魔兽地图
一、题目点此看题二、解法考虑树形dpdpdp,设dp[i][j][k]dp[i][j][k]dp[i][j][k]为对于第iii个点,有jjj个用来上传合成,总共花费了kkk块钱得到的最大价值。转移就分成两种情况,叶子很好处理。对于高级装备,先枚举能造出来这种装备多少件,然后里面就跑背包即可,注意一开始必须要先赋极小值,还有就是当前装备的件数的上界需要去算,可以优化时间。外面还需要跑一遍...原创 2020-03-03 16:19:14 · 156 阅读 · 0 评论 -
[SHOI2014]概率充电器
一、题目点此看题二、解法其实这道题主要考察对期望的理解。0x01 错解设dp[u]dp[u]dp[u]为uuu点被点亮的期望,很容易想到的思路是先跑子树内的,再跑子树外的,转移是难点。一开始写的转移是 dp[u]=∑dp[v]×c+q[u]dp[u]=\sum dp[v]\times c+q[u]dp[u]=∑dp[v]×c+q[u],也就是暴力加起来。子树外的转移就省略了吧,反正也...原创 2019-12-07 16:26:14 · 171 阅读 · 0 评论 -
“百家姓”研究
一、题目题目描述给定一棵nnn个点的树,每个点有一个姓氏(不多于555个字符),有mmm个问题,每次问两个姓氏距离的最大值,如果没有最大值,输出−1-1−1,否则输出最大值。数据范围1≤n,m≤1051\leq n,m\leq10^51≤n,m≤105二、解法首先这个最大距离是跟直径有关系的,我们考虑求出每一个姓氏的直径,最大值一定存在于AAA姓氏两个直径点的和BBB姓氏两个直径点的四...原创 2019-12-06 21:40:27 · 240 阅读 · 0 评论 -
[HNOI2014]世界树
一、题目点此看题二、解法这道题一看就是虚树,我们先把虚树建出来,可惜这道题难点并不在此。设dp[u]dp[u]dp[u]表示离uuu最近的关键点,我们可以用pairpairpair表示dpdpdp,距离为第一关键字,编号为第二关键字,就可以直接用大于符号比较了,这个dpdpdp就跑两遍,比较简单。难点在于统计答案,我们先把离uuu最近的关键点的答案加上uuu实际子树的大小,这里分类讨论一...原创 2019-12-06 20:25:18 · 233 阅读 · 0 评论 -
Kingdom and its Cities
一、题目点此看题二、解法设dp[u]dp[u]dp[u]为解决以uuu为根子树中的关键点不能两两联通的最小花费,由于更新的需要,我们要打上一个标记表示该子树中的关键点还能不能通向外面,我们不需要将它放进dpdpdp中,因为把问题留给父亲解决一定是最优的,这种延迟的思想在很多题目中均有体现,我们尝试分类讨论转移:uuu是关键点,我们先对dp[v]dp[v]dp[v]求和,这时候判断一下(u...原创 2019-12-06 14:39:09 · 250 阅读 · 0 评论 -
[HEOI2014]大工程
一、题目点此看题二、解法这道题设计三个子问题,我们逐个用dpdpdp解决。代价和,考虑每条边的贡献,反应到点上,设sum[u]sum[u]sum[u]为子树uuu内关键点个之和,所以每条边的贡献为sum[u]×(k−sum[u])sum[u]\times (k-sum[u])sum[u]×(k−sum[u])(此处边权为1),然后贡献求即可。最小路径,定义dp[u][0/1]dp[u]...原创 2019-12-05 20:21:09 · 253 阅读 · 0 评论 -
[SDOI2011]消耗战
一、题目点此看题二、解法很容易看出来原创 2019-12-05 17:30:33 · 249 阅读 · 0 评论 -
[ZJOI2008]骑士
一、题目点此看题二、解法这道题的图一定是若干个不连通的基环树,考虑到一条边的限制是两边不能同时选,我们先将一个边的限制确定了,再对整棵树跑没有上司的舞会,所以我们就取环上的一对点,跑两次dpdpdp,每次限制某一个点一定不能选,这道题细节有点多,详细看代码。#include <cstdio>#include <iostream>using namespace s...原创 2019-12-03 08:36:17 · 138 阅读 · 0 评论 -
小凸玩密室
一、题目点此看题二、解法在讲正解之前,这道题要踩三个点:1、这棵树是一颗完全二叉树,所以很多地方可以简化。2、要求已经点亮的灯要联通,感性理解就是灯堆在一起。3、要求点亮子树之后才能点亮其他点,这就启示我们可以用树dpdpdp。0x01 暴力第一种方法就是全排,但是检查很麻烦,所以不推荐,还是可以拿到10pts10pts10pts。更好的暴力避免了检查,枚举起点后暴力枚举子树内的...原创 2019-11-14 14:28:21 · 289 阅读 · 0 评论 -
兔子与樱花
一、题目点此看题二、解法我们发现删去一个点就会给它的父节点造成son[v]+c[v]−1son[v]+c[v]-1son[v]+c[v]−1的负担。我们遍历整棵树,贪心地看,我们选择删去的子节点的负担越小就越优,于是我们从小到大地删除子节点。但是增加了当前点的负担也给当前点的父亲的操作造成影响,那我们的贪心是错误的吗?其实更新当前点的更新对答案的贡献至少为1,而对于父节点的操作贡献影响至...原创 2019-10-21 20:59:54 · 366 阅读 · 0 评论 -
[ZJOI2016]小星星
一、题目点此看题二、解法0x01 暴力不多说,直接刚全排,然后再暴力检查,O(完全过不了)O(完全过不了)O(完全过不了)。0x02 dp考虑用壮压dpdpdp对暴力优化,设dp[i][j][s]dp[i][j][s]dp[i][j][s]为树上iii节点映射到图上jjj节点,iii的子树(含iii本身)映射到图上,状压成二进制sss的方案数,用树形dpdpdp的方式思考,则能写出下列...原创 2019-10-06 19:40:02 · 219 阅读 · 0 评论 -
赛道修建
普及选手又来做NOIP原题了。一、题目传送门二、解法55分不多说,耐心写拿得到的。正解考虑对答案二分,我们考虑怎么检查midmidmid。用树形dpdpdp的思想,我们先考虑对于uuu的子树的情况:1、如果子树uuu中的最长链大于等于midmidmid,肯定让它单独贡献答案。2、如果子树两条链的组合大于等于midmidmid,让他们组合后贡献答案。3、选择剩下的最长链上传。我们...原创 2019-09-13 12:28:00 · 375 阅读 · 0 评论 -
CF19E Fairy
纪念一下我逝去的语文(110的蒟蒻膜拜AK的大佬)一、题目传送门题意:对于一个图进行二染色,求删去哪些边可以是得染色成功(一定有解),输出可能的边数及可能边的编号(输入顺序)。数据范围:1≤n≤104,0≤m≤1041\leq n\leq 10^{4},0\leq m\leq 10^{4}1≤n≤104,0≤m≤104二、解法0x01 前置芝士先给出一个结论:一个图能染色成功的充...原创 2019-09-01 21:35:29 · 251 阅读 · 0 评论 -
[SHOI2015]聚变反应炉
好久没有搞过树形dp的题了,它对新人很不友好,我就来补一发超详细的题解吧。一、题目点此看题题意给定一棵树,其中每个号节点如果被点亮,就会对周围相连的节点发出ci格能量,点亮第i个节点需要的能量点数为di。问能点亮整棵树的最小能量花费。数据范围对于50%50\%50%的数据,maxci<=1,n<=100000\max{ci}<=1,n&...原创 2019-08-12 13:53:54 · 401 阅读 · 0 评论
分享