树形dp
SC.ldxcaicai
我很菜=_=
展开
-
2018.07.22哨戒炮 II(树形dp)
哨戒炮 II描述你的防线成功升级,从原来的一根线变成了一棵树。这棵树有 N 个炮台,炮台与炮台之间 有 N-1 条隧道。你要选择一些炮台安装哨戒炮。在第 i 个炮台上安装哨戒炮得到的防御力为 vi。上次说过,哨戒炮离得太近会产生神奇的效果。具体来说,对于炮台 i,如果它安装了 哨戒炮且和 k 个哨戒炮用隧道直接相连,那么其防御力会变化 k*di。其中 di 为炮台 i 的抗 干扰属性值。如...原创 2018-07-22 21:16:50 · 284 阅读 · 0 评论 -
2018.11.06 bzoj1912: [Apio2010]patrol 巡逻(树形dp)
传送门一道挺妙的题啊。对于K==1K==1K==1的直接求树的直径。对于K==2K==2K==2的先求一次直径,然后考虑到如果两条边加进去形成的两个环重叠就会有负的贡献。因此把之前那条直径上的边权改成-1再求一次直径就可以了。代码:#include<bits/stdc++.h>using namespace std;inline int read(){ int ...原创 2018-11-06 12:05:42 · 121 阅读 · 0 评论 -
2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)
传送门由题可知给出的是基环森林。因此对于每个基环森林找到环断开dpdpdp两次就行了。代码:#include<bits/stdc++.h>using namespace std;inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); w...原创 2018-11-06 21:54:30 · 147 阅读 · 0 评论 -
2018.11.05 bzoj3124: [Sdoi2013]直径(树形dp)
传送门一道sbsbsb树形dpdpdp第一问直接求树的直径。考虑第二问问的边肯定在同一条直径上均是连续的。因此我们将直径记下来。然后对于直径上的每一个点,dpdpdp出以这个点为根的子树中不走与直径上的节点能得到的最大深度来求出那一段合法边的范围。那么有些什么情况呢?分出了一条跟这个点下面那段直径一样长的那么满足条件的区域最下端不能低于这个点。分出了一条跟这个点上面那段直径一样...原创 2018-11-05 20:17:09 · 140 阅读 · 0 评论 -
codeforces 1092F. Tree with Maximum Cost(换根dp)
传送门sbsbsb树形dpdpdp题。题意简述:给出一棵边权为1的树,允许选任意一个点vvv为根,求∑i=1ndist(i,v)∗ai\sum_{i=1}^ndist(i,v)*a_i∑i=1ndist(i,v)∗ai的最大值。直接统计出子树的权值和转移就行了。代码:#include<bits/stdc++.h>#define ri register intusin...原创 2018-12-19 23:28:36 · 348 阅读 · 0 评论 -
NOIP训练 czy的后宫5(树形dp)
传送门题意:给一棵有根树,树有点权,最多选出mmm个点,如果要选一个点必须先选其祖先,问选出来的点权和最大值是多少。直接背包转移就行了。代码...原创 2018-12-31 13:00:48 · 220 阅读 · 0 评论 -
codeforces685B. Kay and Snowflake(树形dp)
传送门题意简述:给出一棵树,求每个子树的重心。首先通过画图可以观察出一个性质,我们从叶子结点向根节点递推重心的话重心的位置是不会下降的。然后由于一个点的重心要么是自己,要么在重儿子子树内,因此如果重心不是自己,我们从重儿子子树的重心向自己爬统计答案就行了,由于重心不会下降因此时间复杂度O(n)O(n)O(n)代码:#include&amp;lt;bits/stdc++.h&amp;gt;#defin...原创 2019-01-14 09:50:41 · 372 阅读 · 0 评论 -
bzoj4316: 小C的独立集(仙人掌+树形dp)
传送门题意:给出一个仙人掌森林求其最大独立集。思路:如果没有环可以用经典的树形dpdpdp解决。fi,0/1f_{i,0/1}fi,0/1表示第iii个点不选/选的最大独立集。然后fi,0+=max{fv,0,fv,1},fi,1+=fv,0f_{i,0}+=max\{f_{v,0},f_{v,1}\},f_{i,1}+=f_{v,0}fi,0+=max{fv,0,fv,1},f...原创 2019-02-07 19:16:52 · 323 阅读 · 0 评论 -
bzoj4784: [Zjoi2017]仙人掌(仙人掌+树形dp)
传送门题意:给一个无向连通图,问给它加边形成仙人掌的方案数。思路:先考虑给一棵树加边形成仙人掌的方案数。这个显然可以做树形dp。fif_ifi表示把iii为根的子树加边形成仙人掌的方案数。然后有两种情况:iii点没有父亲iii点有父亲对于第一种情况即iii是树根的情况,显然fi=(∏fv)∗g∣sonp∣f_i=(\prod f_v)*g_{|son_p|}fi=(∏f...原创 2019-02-07 20:55:57 · 188 阅读 · 0 评论 -
bzoj1487: [HNOI2009]无归岛(仙人掌+树形dp)
传送门人脑转化条件过后的题意简述:给你一个仙人掌求最大带权独立集。思路:跟这题没啥变化好吗?再写一遍加深记忆吧。就是把每个环提出来分别枚举环在图中的最高点选还是不选分别dpdpdp一下即可,时间复杂度O(n+m)O(n+m)O(n+m)代码:#include<bits/stdc++.h>#define ri register intusing namespace std...原创 2019-02-07 21:18:35 · 168 阅读 · 0 评论 -
bzoj5463: [APIO2018] 铁人两项(圆方树+树形dp)
传送门题意简述:给你一张无向图,问你满足存在从a−>b−>ca->b->ca−>b−>c且不经过重复节点的路径的有序点对(a,b,c)(a,b,c)(a,b,c)的数量。思路:对每一个连通块建一棵圆方树,然后可以按照圆点和方点做不同的树形dpdpdp。圆点:找存在于两棵不同子树的点对数方点:找存在于三颗不同子树的点对数...原创 2019-03-29 23:35:08 · 149 阅读 · 0 评论 -
bzoj4446: [Scoi2015]小凸玩密室(树形dp)
传送门题意简述:给一棵完全二叉树,有点权aia_iai和边权,每个点有一盏灯,现在要按一定要求点亮:任意时刻点亮的灯泡必须连通点亮一个灯泡后必须先点亮其子树费用计算如下:点第一盏灯不要花费,之后如果点一盏灯uuu,且上一盏点的是vvv,花费是au∗distu,va_u*dist_{u,v}au∗distu,v问把所有点都点亮的最小花费。思路:树形dpdpdp好题。考虑到...原创 2019-03-26 14:24:06 · 159 阅读 · 0 评论 -
2018.11.01 NOIP训练 树的排列(树形dp)
传送门跟这道题差不多。只不过是让权值小的儿子做权值大的儿子的父亲而已。代码原创 2018-11-02 07:29:18 · 195 阅读 · 0 评论 -
2018.10.30 NOIP模拟 排列树(树形dp+组合数学)
传送门考试的时候乱搞过了。其实题目就是让你求拓扑排序方案数。直接树形dpdpdp然后组合数转移一下就行了。乱搞代码原创 2018-10-30 18:30:28 · 285 阅读 · 0 评论 -
2018.10.26 NOIP训练 数数树(换根dp)
传送门换根dpdpdp傻逼题好像不好码啊。考虑直接把每一个二进制位拆开处理。先dfsdfsdfs出每个点到1的异或距离。然后分类讨论一波:如果一个点如果当前二进制位到根节点异或距离为1,那么对于当前二进制位到这个点距离为000的就是到根节点距离为111的,如果当前二进制位到这个点距离为111的就是到根节点距离为000的。如果一个点如果当前二进制位到根节点异或距离为1,那么对于当前二进...原创 2018-10-26 18:29:16 · 439 阅读 · 0 评论 -
2018.07.22 洛谷P2986 伟大的奶牛聚集(树形dp)
传送门 给出一棵树,树有边权和点权,若选定一个点作为中心,这棵树的代价是所有点权乘上到根的距离的和。求代价最小。解法:一道明显的换根dpdpdp,如果枚举根的话时间复杂度O(n2)O(n2)O(n^2)直接上天。看来只能通过某些方法来优化时间复杂度啊。我们知道求出以111为根的代价是可以O(n)O(n)O(n)递推的。然后这样能否推出111的儿子的代价呢?显然是可以的,对于以vvv为根的...原创 2018-07-22 22:16:13 · 172 阅读 · 0 评论 -
2018.07.22 洛谷P3047附近的牛(树形dp)
传送门 给出一棵nnn个点的树,每个点上有CiCiC_i头牛,问每个点kkk步范围内各有多少头牛。 刚看完题惊了这东西不可做啊。 然后就开始想换根dpdpdp,结果没杠出来。 继续读题发现kkk很小啊,才202020,那这怕不是可以跑一个O(nk)O(nk)O(nk)的算法哦。 然后发现确实可以O(nk)O(nk)O(nk)做出来,方法是这样的。 我们仍然先选一个节点(为了方便我选的就...原创 2018-07-22 23:08:37 · 187 阅读 · 0 评论 -
2018.09.01 独立集(树形dp)
描述给定一颗树(边权为1),选取一个节点子集,使得该集合中任意两个节点之间的距离都大于K。求这个集合节点最多是多少输入第一行是两个整数N,K 接下来是N-1行,每行2个整数x,y,表示x与y有一条边输出1个整数表示最多的节点数样例输入3 1 1 2 1 3样例输出2提示 测试点 N的上限 K 特征 ...原创 2018-09-01 11:36:09 · 166 阅读 · 0 评论 -
2018.09.01 loj#2330. 「清华集训 2017」榕树之心(树形dp)
传送门 树形dp好题啊。 我们用w[i]w[i]w[i]表示以i为根的子树最少可以把在子树外的榕树之心向子树里拉多少距离。 我们令i最大的子树的根为msmsms。 那么有几种情况: 1. size[ms]size[ms]size[ms]过大,用i其它的子树无法把榕树之心拉回到i去,这个时候有: w[i]=w[ms]−(size[i]−1−size[ms])w[i]=w[ms]−(siz...原创 2018-09-01 16:34:34 · 314 阅读 · 0 评论 -
2018.09.06 警卫安排(树形dp)
描述太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫。 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状;有边直接相连的宫殿可以互相望见。大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候看守,在不同的宫殿安排看守所需的费用不同。 可是陆小凤手上的经费不足,无论如何也没法在每个宫殿都安置留守侍卫。 编程任务:帮助陆小凤布置侍卫,在看守全部宫殿的前提下,使得花费的经费最少。...原创 2018-09-06 23:43:53 · 408 阅读 · 0 评论 -
2018.09.25 bzoj3572: [Hnoi2014]世界树(虚树+树形dp)
传送门虚树入门题?好难啊。在学习别人的写法之后终于过了。这道题dp方程很好想。主要是不好写。简要说说思路吧。显然最优值只能够从子树和父亲转移过来。于是我们先dfs一遍用儿子更新父亲,然后再dfs一遍用父亲更新儿子。这样搞完之后可以统计出每个点所属的管辖点。然后统计。但这样单次跑是O(n)O(n)O(n)的不优秀。考虑优化算法的时间复杂度。注意到所有管辖点加起来只有O(n)...原创 2018-09-25 20:02:32 · 335 阅读 · 0 评论 -
2018.09.14 洛谷P3931 SAC E#1 - 一道难题 Tree(树形dp)
传送门 简单dp题。 f[i]表示以i为根的子树被割掉的最小值。 那么有: f[i]=min(∑vf[v],dist(i,fa))f[i]=min(∑vf[v],dist(i,fa))f[i]=min(\sum _v f[v],dist(i,fa)) 直接树形dp就行了。 代码:#include<bits/stdc++.h>#define N 100005usi...原创 2018-09-14 23:41:18 · 155 阅读 · 0 评论 -
2018.10.04 NOIP模拟 航班(tarjan+树形dp)
描述L因为业务繁忙,经常会到处出差。因为他是航空公司的优质客户,于是某个航空公司给了他一个优惠券。他可以利用这个优惠券在任何一个国家内的任意城市间免费旅行,当他的路线跨国才会产生费用。L有一个航空公司的价格表与航线。而且每个城市出发都能到所有的城市,2个城市间可能有不止一个航班,一个国家内的2个城市间一定有不同的路线,但是不同国家的城市间只有一条路线。L想知道从每个城市出发到产生费用最多的城市...原创 2018-10-11 23:44:21 · 166 阅读 · 0 评论 -
2018.10.04 codeforces1060E. Sergey and Subway(树形dp)
传送门一开始把题意读错了。我们dfs时对于边(p,fa)(p,fa)(p,fa),计算出以ppp为根的子树对子树外连通块的贡献,然后加上漏加的贡献。这样算出来是答案的两倍。因为相当于dis(u,v)dis(u,v)dis(u,v)和dis(v,u)dis(v,u)dis(v,u)的贡献都被计入了答案。代码:#include<bits/stdc++.h>#define N ...原创 2018-10-04 21:45:55 · 609 阅读 · 2 评论 -
2018.09.28 bzoj3743: [Coci2015]Kamp(树形dp)
传送门这是一道很有意思的题。我们把所有的关键点都提出来,当成一棵有边权的虚树。然后发现虚树上除最后不回到虚根的那条路径外外每条边都会被走两遍。显然要让答案最优,不走的路径应该在虚树的直径上,于是我们dfs出虚树的直径。注意对于不在虚树上的节点花费还需要多加dis(i,虚树)∗2dis(i,虚树)*2dis(i,虚树)∗2。代码:#include&amp;lt;bits/stdc++.h&amp;gt...原创 2018-09-28 09:22:11 · 161 阅读 · 0 评论 -
2018.10.15 NOIP训练 水流成河(换根dp)
传送门换根dp入门题。貌似李煜东的书上讲过?不记得了。先推出以1为根时的答案。然后考虑向儿子转移。我们记f[p]f[p]f[p]表示原树中以ppp为根的子树的答案。g[p]g[p]g[p]表示把根换成ppp时整棵树的答案。于是有g[v]=f[v]+min(g[p]−min(e[i].c,f[v]),e[i].c)g[v]=f[v]+min(g[p]-min(e[i].c,f[v]...原创 2018-10-15 10:36:20 · 574 阅读 · 0 评论 -
bzoj2159: Crash 的文明世界(树形dp+第二类斯特林数)
传送门题意:给一棵树,边权为 1,对于每个点 i,输出 ∑j=1ndis(i,j)m,n≤50000,m≤500∑_{j=1}^ndis(i, j)^m,n ≤ 50000, m ≤ 500∑j=1ndis(i,j)m,n≤50000,m≤500思路:考虑对所有的i∈[0,m]i\in[0,m]i∈[0,m]维护∑disi‾\sum dis^{\underline i}∑disi。然...原创 2019-07-27 16:23:11 · 211 阅读 · 0 评论