
树形dp
文章平均质量分 69
🌳🌳🌳🌳🌳🌳🌳
阐上
hh厨
展开
-
ICPC World Finals 2020 ‘S No Problem (树形dp) (k 条不相交路径覆盖最值问题)
ICPC World Finals 2020 'S No Problem (树形dp) (k 条不相交简单路径覆盖最值问题)原创 2022-11-25 18:22:00 · 1741 阅读 · 0 评论 -
牛客练习赛101 D - 罪业之都(树形dp、构造)
牛客练习赛101 D - 罪业之都(树形dp、构造)原创 2022-08-14 15:24:16 · 535 阅读 · 0 评论 -
洛谷:P4516 [JSOI2018] 潜入行动(树形dp、树上分组背包统计方案数)
洛谷:P4516 [JSOI2018] 潜入行动(树形dp、树上分组背包统计方案数)原创 2022-07-16 12:14:46 · 542 阅读 · 0 评论 -
【CF1388C】Uncle Bogdan and Country Happiness(树形dp、贪心)
快乐检测器题意:思路:抓住重要的点,心情只有可能由好变坏,一个人变成坏心情后就不能变回好心情,但好心情却可以随时通过一条边变成坏心情。这就导致我们可以狠狠地贪心,尽可能让多的人保持好心情,即使好心情多了也可以通过走边减少。所以,对于每个点维护一个至少的好心情人数(因为以下结点为了满足检测值,需要一定的好心情人),维护一个走到该点的人数,然后再处理细节问题。Code:Code:Code:#include<bits/stdc++.h>#include<unor原创 2022-04-07 21:36:46 · 376 阅读 · 0 评论 -
【CF431C】C. k-Tree(树形dp)
K树题意:给定一颗 K树,K 树每个结点以下的分支都为 K 条(每个点都有 K 个子节点),边权分别为 1 — K。求从根节点开始,总长度为 n ,同时路径上至少有一条边的长度超过 d 的路径有多少条。思路:很显然的树形dp…但没给定树的大小,要自行寻找范围。显然我们最多需要处理 n 层即可,n 层每层长度为 1 的路径满足条件,再深的层会超出 n 长度限制。同时因为 K 树的独特性质,可以在转移的时候用任何长度的边转移。Code:Code:Code:#include<bit原创 2022-04-07 15:16:04 · 437 阅读 · 0 评论 -
【CF1646D】D. Weight the Tree(树形dp、贪心)
加权树题意:给定一颗树,让你给树上的点赋予权值。定义一个点的权值等于其所有相邻节点的权重之和时,这个点就是 good。你需要找到一种赋值方法,使得树中 good 点数最多,同时所有顶点的权重总和最小。思路:可以发现,除了单独两个点一条边的情况,这两个点都赋值为 1,都是 good,其他情况下,树中任意相邻两点不可能同时都是 good。画下图就能看出来。当时完全没往这方面想…这就启发我们,去维护一个树上最大独立集(最大点集同时点集中的点之间没有边)这完全可以用 树形dp 的思想去原创 2022-04-07 10:19:41 · 282 阅读 · 0 评论 -
【CF743D】D. Chloe and pleasant prizes(树形dp)
克洛伊和令人愉快的奖品题意:给定一棵树,树上每个结点都有一个 value 值可正可负。问在这颗树中选取 两棵不重叠的子树,使得累计 value 值最大思路:一开始没读懂题,特判情况去了,事实上用 dp 处理非常简单。每个结点维护一个,该结点以下的树内的最大 value 子树,记为 dpmax[]再用个 dpans[] 处理挑选两颗子树的情况,对于每个结点从最大子树、次大子树转移过来。Code:Code:Code:#include<bits/stdc++.h>原创 2022-04-07 09:07:39 · 244 阅读 · 0 评论 -
【CF982C】 C. Cut ‘em all(树形dp)
C. Cut 'em all!题意给定一棵树,问你能切掉最多多少条边,使得这棵树剩余连通块中点的个数都是偶数。思路:贪心地去删除,按照 dfs 序累计能删的边数。如果某子树内边数为偶数了,这个子树显然可以作为一个块单独存在,使得贡献 + 1。最后要注意无解的情况。Code:Code:Code:#include<bits/stdc++.h>#include<unordered_map>#define mem(a,b) memset(a,b,sizeof a)原创 2022-04-06 16:25:26 · 317 阅读 · 0 评论 -
洛谷:P5536 【XR-3】核心城市 (贪心)
题意:很清晰,不多赘述。思路:一眼过去,很容易想到这 k 座城市在这颗树的中心部位(要求黏在一起)也很容易被迷惑,觉得是求出树的中心后,bfs扩散找 k 个点。这样是错的,反例如下:对于这棵树,红点显然是树的中心,如果用扩散找 k 个点,就会把红点上方两个点当成核心城市,显然错误,正解核心城市应该是绿框中的点这就启发我们从贡献的角度思考:要使得任意非核心城市与这 k 座核心城市的距离 最大值 最小,那我们每次使当前最大值 - 1,减 k - 1 次不就好了(因为根节点已经是核心城市.原创 2022-04-03 12:48:24 · 1571 阅读 · 0 评论 -
洛谷:P3629 [APIO2010]巡逻 (树形dp,思维)
题意:给定一颗树,每次从 1 号结点要求走遍这颗树的所有边(至少一次),最后回到 1 号点,显然走的过程中有些边会走重复。让你在这棵树上加 1 或 2 条边(连接两个存在的结点),问怎么加可以使得走的过程中尽可能少地经过边,求出这个最少的边数。思路:分情况讨论,在不加边的情况下,显然我们会把每条边走两遍(要回到 1 点),走的边数是固定的。在加 1 条边的情况下,画图观察可以发现,这颗树上必定会形成一个环,经过这个环可以不走 回 这条边两点原本的路径,这也就是我们省略的边数。.原创 2022-04-03 11:25:33 · 562 阅读 · 0 评论 -
2021秋季算法入门班:B-树(树形dp,dfs序)
The shy来全dp了此题一眼树形dp,但很容易被误导此题 状态转移 跟树的结点位置、形状没有关系,跟树的 dfs序 有关设 dp[i][j]dp[i][j]dp[i][j] 为选取 前 i 个 结点,使用了 前 j 种 颜色的方案数;对于结点 i ,不需要考虑它的编号,只需要考虑它是转移中的第几个结点,从 dfs序 去转移;有:dp[i][j]=dp[i−1][j]+dp[i−1][j−1]∗(k−j+1)dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(k-j+1原创 2022-02-15 15:49:13 · 272 阅读 · 0 评论 -
2021 ICPC 区域赛(上海) G.Edge Groups(树形dp)
边集合引用 lwz_159的题解博客Code:Code:Code:#include<bits/stdc++.h>#include<unordered_map>#define mem(a,b) memset(a,b,sizeof a)#define cinios (ios::sync_with_stdio(false),cin.tie(0),cout.tie(0))#define sca scanf#define pri printf#define forr(a,b原创 2022-02-14 18:22:17 · 649 阅读 · 0 评论