
树形dp
文章平均质量分 70
Frozen_Guardian
已退役菜鸡Acmer
展开
-
2021牛客多校4 - Rebuild Tree(树形dp)
题目链接:点击查看题目大意:给出一棵 nnn 个节点的树,现在可以删掉 kkk 条边,然后加上 kkk 条边,问有多少种方案使得操作后 nnn 个点仍然是一棵树题目分析:原树删掉 kkk 条边后会变成一个具有 k+1k+1k+1 个连通块的森林,设每个连通块的大小依次为 s[1]...s[k+1]s[1]...s[k+1]s[1]...s[k+1],考虑 prufer 序列,答案就是 nk−1∏i=1ks[i]n^{k-1}\prod\limits_{i=1}^{k} s[i]nk−1i=1∏ks[i原创 2021-07-29 10:29:42 · 275 阅读 · 0 评论 -
CodeForces - 1485E Move and Swap(树形dp)
题目链接:点击查看题目大意:给出一棵有根树,每个节点都有权值,满足所有叶子结点到根节点的距离相同,初始时在根节点有两个硬币,分别是红色和蓝色,每次可以执行如下操作:将红色硬币移动到任意一个子节点将蓝色硬币移动到下一层的任意一个节点(可选)交换红色硬币和蓝色硬币本次操作的贡献是红色硬币和蓝色硬币点权之差的绝对值问如何移动可以使得贡献之和最大题目分析:...原创 2021-06-14 12:25:03 · 224 阅读 · 0 评论 -
CodeForces - 1453E Dog Snacks(树形dp+贪心)
题目链接:点击查看题目大意:给出一棵有根树,现在需要选择一个最小的 k 值,可以满足下列的 n 次操作:起始时位于点 1(根节点) 每一步选择一个未被遍历的节点中,距离最近的,且必须满足此距离小于等于 k 跳到上述选择的点上去,然后重复操作 2,直到所有的点都被遍历过 回到点 1,需要满足这段距离也小于等于 k问最小的 k 是多少题目分析:一开始以为是二分+check,但是感觉check很难写,于是思考树形dp类比于ccpc秦皇岛的那个树形dp,贪心去思考一下,对于一个普通的节点 u原创 2020-12-05 22:21:53 · 359 阅读 · 0 评论 -
树形DP求树的最小支配集,最小点覆盖,最大独立集
转自:https://www.cnblogs.com/Ash-ly/p/5783877.html一:最小支配集考虑最小支配集,每个点有两种状态,即属于支配集合或者不属于支配集合,其中不属于支配集合时此点还需要被覆盖,被覆盖也有两种状态,即被子节点覆盖或者被父节点覆盖.总结起来就是三种状态,现对这三种状态定义如下:1):dp[i][0],表示点 i 属于支配集合,并且以点 i 为根的子树都被覆盖了的情况下支配集中所包含最少点的个数.2):dp[i][1],表示点 i 不属于支配集合,且以 i转载 2020-11-19 17:46:21 · 461 阅读 · 0 评论 -
CodeForces - 856B Similar Words(AC自动机+树形dp)
题目链接:点击查看题目大意:给出一个大小为 n 的字符串集记为 X,给出两个字符串相似的定义为:如果某个字符串去掉首字母可以得到另一个字符串现在需要构造一个尽可能大的字符串集,满足以下两个条件:所有的元素都是 X 中元素的前缀 任意两个元素都不能相似题目分析:因为需要构造的字符串集内的元素都是前缀,不难想到字典树,再考虑如果两个字符串是相似的,在字典树上的表现为:一个串是另一个串的 fail ,且深度恰好相差1 。回想一下 fail 指针的定义,也就是与前缀匹配的最长后缀,所以如果 fai.原创 2020-11-19 17:13:10 · 241 阅读 · 2 评论 -
2020CCPC(威海) - Rencontre(树形dp)
题目大意:给出一棵带权树,规定 ,解释一下就是当确定三个点 u1 , u2 , u3 后,需要找到一个点 v 到三个点的距离之和最小,现在给出 u1 , u2 , u3 的可行取值,问 f 函数的期望是多少题目分析:考虑转换模型,对于给定的 u1 , u2 和 u3 来说,不难猜出点 v 是唯一存在的(不会证明),相应的这个最短的距离之和也是唯一确定的,且可以表示为这样一来根据两个期望的基本公式进行转换:E( X + Y ) = E( X ) + E( Y ) E( CX ) = CE(...原创 2020-10-26 17:44:48 · 1779 阅读 · 4 评论 -
2020CCPC(秦皇岛) - Kingdom‘s Power(树形dp+贪心)
题目大意:给出一棵 n 个节点的有根树,点 1 为根节点,现在在根节点有无穷多个士兵,每一秒可以控制任意一个士兵向任意一个单位移动一步,士兵移动到的点会被永久占领,现在问最少需要经过多少秒,才能将所有的点都占领题目分析:树形dp...原创 2020-10-21 10:16:25 · 2657 阅读 · 5 评论 -
中石油训练赛 - Plan B(点双缩点+树形dp)
题目大意:给出一张 n 个点 m 条边的无向连通图,现在有某些点被标记了,问能否通过删除某个未被标记的点,使得删除该点后的数个互不相交的连通块中,至少存在一个联通块中不含有被标记的点题目分析:首先不难看出,被删掉的点一定是割点,所以我们可以直接用 tarjan 求出割点,然后点双缩一下点,将整个图缩成一棵树,在树上dp即可代码://#pragma GCC optimize(2)//#pragma GCC optimize("Ofast","inline","-ffast-math")...原创 2020-09-30 11:34:32 · 260 阅读 · 0 评论 -
牛客多校1 - Infinite Tree(虚树+换根dp+树状数组)
题目链接:点击查看题目大意:给出一个无穷个节点的树,对于每个大于 1 的点 i 来说,可以向点 i / minvid[ i ] 连边,这里的 mindiv[ x ] 表示的是 x 的最小质因数,现在给定 m 个点分别是 1! , 2! , 3! ... ,每个点都有个权值 w[ i ] ,现在需要找出一个点 u ,使得最小,输出这个最小值题目分析:先说收获,通过这个题让我稍微明白了一点换根dp。。话说为什么不直接去刷换根dp的题目,感觉有点多此亿举再说简单的部分,如果 m 个节点的树已经求出来了原创 2020-08-27 20:19:06 · 679 阅读 · 0 评论 -
洛谷 - P4323 [JSOI2016]独特的树叶(树上哈希+换根dp)
题目链接:点击查看题目大意:给出一棵 n 个节点的树 A ,再给出一棵 n + 1 个节点的树 B,题目保证了树 B 是树 A 添加了一个叶子结点后的一棵树,只不过编号的顺序不同,现在问这个叶子节点是哪个节点,如果有多个满足条件的节点,输出编号最小的那个题目分析:题目的意思是树 B 去掉一个叶子节点后,与树 A 同构,这样我们可以先以点 1 为根节点,用树上哈希 O( n ) 求出 dp1[ 1 ] 表示以点 1 为根节点时树的哈希值,然后利用换根 dp ,O( n ) 求出 dp2[ x ] 表示原创 2020-08-31 20:45:06 · 383 阅读 · 0 评论 -
牛客多校10 - Identical Trees(dp+二分图最小权匹配)
题目链接:点击查看题目大意:给出两个同构树 tree1 和 tree2 ,问最少需要改变多少个结点的标号,可以使得这两棵树相同题目分析:直接 dfs 维护 dp 就好了,dp[ i ][ j ] 表示 tree1 中点 i 的子树与 tree2 中点 j 的子树相同所需要的最小代价,如果点 i 的子树和点 j 的子树不同构的话,那么答案设置为无穷大,最后答案就是 dp[ rt1 ][ rt2 ] 了二分图权匹配我用的是KM算法,随机数据的话时间复杂度为 n^3 ,极限数据会被卡到 n^4,不过这原创 2020-08-11 02:55:06 · 607 阅读 · 0 评论 -
牛客 - 树上子链(树的直径-处理负权)
题目链接:点击查看题目大意:给出一棵树,每个点都有权值,现在要求输出树上权值和最大的一条链题目分析:读完题后第一反应是树的直径,赶紧去找来模板贴上,交上去WA了一发后意识到,正常树的直径只能处理非负边权,而这个题目中有负权,然后就想用树形dp乱搞试试,但奈何我的dp非常弱,搞到最后也没搞出来,比赛时我想的是dp[ i ]代表的是从叶子结点到点 i 为止最大的权值和,一路向上转移,交上去一直...原创 2020-02-23 00:06:39 · 825 阅读 · 0 评论 -
牛客 - 点对最大值(树的直径)
题目链接:点击查看题目大意:给出 n 个点组成的一棵树,每个点和每条边都有权值,现在需要求出一对点 ( x , y ) ,使得点 x 到点 y 的唯一路径权值和最大,权值和包括点 x 和点 y 的权值以及路径上所有边的权值之和题目分析:比赛时没注意到这是树的直径,在那里写了一个小时的换根dp也没写出来,导致也没时间去看其实很简单的 G 题,感觉亏死了树的直径模板题,只不过加了个限制是路径上还需要加上两个端点的权值,只需要稍微修改一下就好了代码:#include<iostream&原创 2020-05-31 19:25:21 · 318 阅读 · 0 评论 -
牛客 - 树上求和(贪心+树形dp)
题目链接:点击查看题目大意:给出一棵树,现在要求给每条边赋上 0 ~ n - 1 的值,且不重复,规定每条路径 ( u , v ) 的权值和为其简单路径上的边权之和,而整棵树的权值和为 所有简单路径的权值和 之和,现在让我们给每条边赋值,使得最后树的权值和最小,输出最小值题目分析:一开始以为是构造,被吓到了,结果补题的时候发现是个简单贪心,只需要计算一下每条边出现的次数,按照出现次数贪心赋...原创 2020-03-22 00:22:17 · 656 阅读 · 0 评论 -
CodeForces - 1324F Maximum White Subtree(树形dp)
题目链接:点击查看题目大意:给出 n 个点组成的树,每个点都有一个颜色,非黑即白,现在问对于每个点而言,选出一个连通块,使得白色点的个数与黑色点的个数做差最大题目分析:记录一下div3的第一次ak,实际上应该是伪ak,感谢zx学长最后抬了我一手F题,dp真的是天克我,不过通过这个题真的学到了不少首先这个题,题意给出的subtree一定别想当然以为是子树,我一开始就是因为这里读错题然后就...原创 2020-03-13 00:22:40 · 3104 阅读 · 0 评论 -
蓝桥杯 - 生命之树(树形dp)
在X森林里,上帝创建了生命之树。他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列 {a, v1, v2, ..., vk, b} 使得这个点列中的每个点都是S里面的元素,且序列中相邻两个点间有一条边相连。在这个前提下,上帝要使得S中的点所对应的整数的和尽量大...原创 2019-11-27 00:35:54 · 719 阅读 · 0 评论 -
CodeForces - 1220E Tourism(边双缩点+树形dp)
题目链接:点击查看题目大意:给出一个由n个点和m条边构成的无向图,每个点都有一个权值,现在给出起点st,问从起点出发,如何规划路线可以使得途径的权值最大,唯一的约束是一条边不能连续经过,比如当前从u->v,下一次不可以从v->u题目分析:首先要理解好题目,题目中的一条边不能连续经过两次,不代表只能经过两次,换句话说,若几个点可以构成环,那么他们就可以在环上跑一圈然后再出去,所以...原创 2020-01-08 19:28:57 · 298 阅读 · 0 评论 -
POJ - 3342 Party at Hali-Bula(树形dp)
题目链接:点击查看题目大意:n个人参加聚会,每个人都不想和老板一起参加,问最多可以有多少个人参加,并且判断方案唯一性题目分析:这个类型的题目这已经是第三个了,状态转移方程都一模一样,不过这个题有点不同的地方是需要判断唯一性,我看到网上有两种方法,一种是通过状态转移的过程中如果发现dp[v][1]==dp[v][0]就设置一个flag为false,即在这个地方就出现了分歧,因为想起来和写起来...原创 2019-08-14 20:13:26 · 276 阅读 · 0 评论 -
CodeForces - 1118F1 Tree Cutting (Easy Version)(树形dp)
题目链接:点击查看题目大意:给定n个点,每个点的权值分别对应颜色:0:无颜色,1:红色,2:蓝色,现在需要切割边,使切割后的两个部分不能出现红色和蓝色掺杂的部分,也就是说两个部分必须只能各自含有一个颜色,问这样的边最多能有几条题目分析:树形dp的思想,用dfs记录以当前点为根节点的子树中红色点和蓝色点的个数,边界为当该子树中红色节点或蓝色节点等于整棵树中的红色节点或蓝色节点,并且另一种颜色...原创 2019-08-15 10:26:03 · 277 阅读 · 0 评论 -
HDU - 2196 Computer(树形dp)
题目链接:点击查看题目大意:给定n个点以及n-1条边,保证可以组成一棵树,问每个点所能到达的最远距离题目分析:首先这是一颗无向图所组成的树,经过分析,我们可以得到任何一个点,对于它所能到达的最远距离取决于两个条件,一个是该点向下可以到达的最远距离,或者是该点向上可以到达的最远距离,求该点向下的距离好求,可以利用树形dp的一般形式,回溯法,直接自底向上地往上求,不仅需要维护一个最大值,还需要...原创 2019-08-15 15:54:41 · 302 阅读 · 0 评论 -
CodeForces - 1092F Tree with Maximum Cost(树形dp+树根转移)
题目链接:点击查看题目大意:给出一个树,每个顶点都有一个权值,任意一点到其他点的距离为经过边的数量,求出一点到其他每一个点的距离*权值之和最大题目分析:树形dp,一开始怎么也想不明白,看了别人的代码也还是看不懂,后来慢慢有了点感觉,但感觉如果给变个形还是会搞得我一脸懵,我来尽我所能讲清楚一下这个题吧:首先,因为这个题目的N给的很大,所以不能直接枚举每个点然后按照那个公式求解,因为树的最...原创 2019-08-15 20:01:34 · 422 阅读 · 0 评论 -
HDU - 5242 Game(树形dp+树链剖分/树上贪心+思维)
题目链接:点击查看题目大意:给出一棵包含n个节点的树,每个节点都有一个权值,整棵树的根是点1,问从点1开始向下一直走到叶子节点,可以走k次,怎么样走权值和最大,每个节点被走过一次后权值会变为0题目分析:这个题有两个方法可以做,先说一下比较好想的一种吧:树形dp:我们需要考虑应该怎样dp,因为每次都是从1节点向下走到叶子节点,可以先求出来最长链,即从点1到某一叶子节点权值最大的一条链...原创 2019-08-16 13:11:05 · 274 阅读 · 0 评论 -
CodeForces - 1088E Ehab and a component choosing problem(树形dp)
题目链接:点击查看题目大意:给出一棵树,每个顶点都有权值,在树上选出k个相互独立的连通块,使得其权值和的平均值最大的情况下选的块数最多题目分析:这个题目中平均值的优先级大于块数,那么我们可以在树上找到一块权值最大的连通块,记录下他的权值后,在对于整棵树搜索一下有几个权值等于上述最大值并且相互独立的连通块,可以用树形dp自底向上来记录每棵子树的最大权值和,对于每个顶点,我们可以选择用或不用,...原创 2019-08-16 19:11:40 · 221 阅读 · 0 评论 -
HDU - 4705 Y(树形dp)
题目链接:点击查看题目大意:给出一棵树,求三个点不在一条线上的个数题目分析:正难取反,正着求不管是暴力还是有点技巧都是实现不了的,我们可以求出来三个点在一条直线上的方案数,然后用总的排列组合的方案减去三个点在一条直线的方案数,就是最终答案了,那么该怎么求三个点在一条直线上的数量呢?我们可以利用树形dp,期间维护子树中节点的数量,每次选择子树的根节点作为直线上三个点的那个中点,然后从子树中选...原创 2019-08-16 19:29:56 · 281 阅读 · 0 评论 -
POJ - 4045 Power Station(树形dp/树的重心)
题目链接:点击查看题目大意:给出一个n个节点的树,我们需要选出一个节点,到其余任何节点的距离和最小题目分析:这个题我的第一反应是用树的重心,先求出来符合条件的点,然后再跑一遍dfs求距离,最后输出就好,因为树的重心的定义是子树节点<= n/2, 而每一棵树的重心不会超过2个,所以记录答案的时候也变得简单了许多,去网上查了一下没查到用树的重心做的题解,还以为是自己思路想错了,但是自己写...原创 2019-08-17 16:33:09 · 270 阅读 · 0 评论 -
2019ICPC(沈阳) - Fish eating fruit(树形dp+树根转移)
题目链接:点击查看题目大意:给出一棵树,给出分类规则:设两点之间的距离为w,则按照w对3取模后的余数分为三组(0,1,2),问两两顶点之间的距离分类后之和为多少,答案输出模分别为0,1,2时的距离和题目分析:这个题目需要我们求以每个点为根节点跑一遍dfs然后对距离加和,但显然复杂度为n*n,会T,既然需要每个点都当一次根节点,我们可以试试用树根转移的思想,这样配合上动态规划,就能将时间复杂...原创 2019-09-17 12:03:27 · 324 阅读 · 0 评论 -
POJ - 2342 Anniversary party(树形dp入门)
题目链接:点击查看题目大意:每个人都有一个快乐值,给定一个树状的从属关系,仅当上司和下属都不在的时候这个个人的快乐值才能表现出来,问怎么样才能让整体的快乐值达到最大题目分析:做线段树做吐了,来换换思维,入门的树形dp题一道,树形dp,简明扼要的说就是在树上做的动态规划,那么就离不开转移方程了,这个题的状态有两个,来或者不来,有点像背包问题的选与不选,那么我们就假设dp[i][j]代表第i个...原创 2019-08-07 17:33:13 · 217 阅读 · 0 评论