![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树形dp
文章平均质量分 73
Brightess
毕业于湖南城市学院
目前在某游戏大厂搬砖(
展开
-
CodeForces-1324F Maximum White Subtree(换根dp 联通子图信息查询)
换根dp 联通子图信息查询原创 2022-08-24 23:58:06 · 209 阅读 · 0 评论 -
Codeforces 1092F Tree with Maximum Cost(换根树形dp 二次扫描法)
换根dp 二次扫描原创 2022-08-23 17:21:13 · 233 阅读 · 0 评论 -
Daimayuan 501 距离和(换根树形dp 入门讲解)
换根dp 二次扫描原创 2022-08-21 22:22:53 · 197 阅读 · 0 评论 -
洛谷 P5536 【XR-3】核心城市(贪心 + 树形 dp 寻找树的中心)
X 国有 nnn 座城市,n−1n - 1n−1 条长度为 111 的道路,每条道路连接两座城市,且任意两座城市都能通过若干条道路相互到达,显然,城市和道路形成了一棵树。X 国国王决定将 kkk 座城市钦定为 X 国的核心城市,这 kkk 座城市需满足以下两个条件:第一行 222 个正整数 n,kn,kn,k。接下来 n−1n - 1n−1 行,每行 222 个正整数 u,vu,vu,v,表示第 uuu 座城市与第 vvv 座城市之间有一条长度为 111 的道路。数据范围:一行一个整数,表示答案。样例输出原创 2022-07-01 21:29:43 · 372 阅读 · 0 评论 -
Codeforces Round #791 (Div. 2) D - Toss a Coin to Your Graph...(树形 dp + 二分 + dfs 判环)
题目来源D Toss a Coin to Your Graph…点此进入题面题意:给定一个有向图,每次可以从任意节点出发找一条长度为k-1的路径,要求,求出路径上点权最大值最小是多少。思路:这道题的基本思路是 二分答案 + dfs,根据图的特性重点放在设计 dfs 操作上若所选的点权值越大,越容易符合 k 条边(有 k 次操作),反之,越难符合 k 条边所以满足单调性,并且要最小化最大值可以用二分来搜索最大点权值,并最小化它而对于我们最大点权值 mid,需要 check(mid) 是否满足原创 2022-05-19 22:21:36 · 169 阅读 · 0 评论 -
Codeforces Round #790 (Div. 4)(A ~ H2 全解析)
A Lucky?点此进入题面题意:思路:模拟#pragma GCC optimize("Ofast")#pragma GCC optimize("inline")#include<bits/stdc++.h>using namespace std;//#define int long longtypedef long long ll;typedef vector<int> vi;typedef pair<int, int> pii;type原创 2022-05-12 16:12:20 · 1221 阅读 · 2 评论 -
AcWing 1074. 二叉苹果树(有依赖的分组背包问题 树形dp)
AcWing 10. 有依赖的背包问题(树形dp + 分组背包)#include<bits/stdc++.h>using namespace std;const int N = 110, M = N<<1;int n, m;int h[N], e[M], ne[M], w[M], idx;int dp[N][N];void add(int a, int b, int c){ e[idx] = b, ne[idx] = h[a], w[idx] = c,..原创 2022-03-24 22:08:15 · 260 阅读 · 0 评论 -
AcWing 323. 战略游戏(树形dp scanf格式化输入)
本题是 AcWing 285. 没有上司的舞会 的对偶题题意:每条边上至少选择一个节点,可以选择的最小权值。思路:树形dp,与没有上司的舞会具有对称性没有上司的舞会:每条边上最多选择一个点,求最大权值战略游戏:每条边上最少选择一条点,求最小权值状态表示f[u][0]:所有以u为根的子树中选择,并且不选u这个点的方案f[u][1]:所有以u为根的子树中选择,并且选u这个点的方案属性:Min状态计算当前u结点不选,子结点一定选f[u][0]=∑(f[si,1])f[u][0]=...原创 2022-03-24 21:55:17 · 2925 阅读 · 0 评论 -
AcWing 1075. 数字转换(约数之和 + 树形dp 求树的最长路径运用)
题意:如果一个数 x 的 约数之和 y(不包括他本身)比他本身 小,那么 x 和 y 可以 互相转换给定一个正整数 n,求出正整数 [1,n] 集合中:在不出现重复数字的情况下,能进行的最大变换步数思路:1、如果一个数 x 的约数之和 y(不包括他本身)比他本身小,则 x 与 y 连一条边,问题转化为求树的最长路径问题2、由于任意正整数 x,的 约数之和 是 唯一的,且本题要求只有约数之和 小于 自身才能转换,故对于所有的 x 来说,他向 小于 自己的数转换的边 至多 只有一条,那就是 x 的..原创 2022-03-24 17:07:59 · 756 阅读 · 0 评论 -
AcWing 1073. 树的中心(树形dp)
题意:给定一棵树,树中包 含 n 个结点(编号1~n)和 n−1 条 无向边,每条边都有一个权值。在树中找到一个点,使得 该点到树中其他结点的最远距离最近。思路:我们以题目给出的样例构建一棵树:分别求出每个点到其它所有点的最长距离,在 所有距离之中取最小值考虑一下 每个点到其它所有点距离 分为哪几类我们可以分为 两大类,第一大类:从 当前点开始往子节点走 的距离(往下)第二大类:从 当前点开始往父节点走 的距离(往上)其中第一大类可以用 上一题:AcWing 1072. 树的..原创 2022-03-24 12:56:47 · 819 阅读 · 0 评论 -
AcWing 1072. 树的最长路径(树形dp)
参考 彩色铅笔题意:在一棵全为无向边,且带边权的树中找到一条长度最大的路径并输出最大长度思路:这是一道比较经典的 树形DP 题目,我们来一步步来剖析这个问题我们知道:树上 任意两点 的路径是 唯一确定的,因此我们可以暴力枚举 起点 和 终点 找出最长路径如果这样做的话,我们来思考一下时间复杂度:枚举 起点 和 终点 — O(n2)O(n^2)O(n2)找出两点之间的路径长度 — O(logn)O(logn)O(logn)但是光是枚举 起点 和 终点,时间复杂度 就直接拉满了,..原创 2022-03-23 21:45:48 · 1044 阅读 · 0 评论 -
dfs深度优先遍历 求树上各节点代表子树大小
输入格式第一行包含整数 n,表示树的结点数。接下来n-1行,每行包含两个整数α和b,表示点a和点b之间存在一条边。输出格式输出一个长度为n的sz序列,表示树上节点1~n所代表子树的大小。数据范围1≤n≤10^5输入样例91 21 71 42 82 54 33 94 6输出样例:9 3 2 4 1 1 1 1 1运用AcWing 846. 树的重心的思想,并稍作修改即可。#include<bits/stdc++.h>using namespace std原创 2022-03-23 11:27:16 · 1876 阅读 · 0 评论 -
AcWing 846. 树的重心(树形dp雏形:树的dfs遍历)
树的深度优先遍历框架时间复杂度为:O(n + m) (n 为点数,m 为边数)使用一个bool数组记录每个节点的遍历情况,防止重复遍历void dfs(int u){ st[u]=true; // 标记一下,记录为已经被搜索过了,下面进行搜索过程 for(int i=h[u]; ~i; i=ne[i]) { int j = e[i]; if(!st[j]) dfs(j); }}题意:重心定义:重心是指树中的一个结点,如果将这..原创 2022-03-23 10:47:47 · 1828 阅读 · 2 评论 -
AcWing 10. 有依赖的背包问题(树形dp + 分组背包)
题意每选择一个物品就应当选择其父节点,问所有选择方案能得到的最大价值是多少?思路一道 背包DP 的 变种题目根据题设的 拓扑结构 可以观察出每个 物品 的关系构成了一棵 树而以往的 背包DP 每个 物品 关系是 任意的(但我们一般视为 线性的)所以,这题沿用 背包DP 的话,要从原来的 线性DP 改成 树形DP 即可然后思考 树形DP 的 状态转移先比较一下以往 线性背包DP 的 状态转移,第 i 件 物品 只会依赖第 i−1 件 物品 的状态如果本题我们也采用该种 状态依赖关系 的...原创 2022-03-22 13:12:06 · 242 阅读 · 0 评论 -
树形dp:AcWing 285. 没有上司的舞会
树形dp给定一棵N个节点的树(通常是无根树,也就是有N-1条无向边),我们可以任选一个节点为根节点,从而定义出每个节点的深度 和 每棵子树的根。在树上设计动态规划算法时,一般就以节点从深到浅(子树从小到大)的顺序作为DP的“阶段”。DP的状态表示中,第一维通常是节点编号(代表以该节点为根的子树)。大多数时候,我们采用递归的方式实现树形动态规划。对于每个节点x,先递归在它的每个子节点上进行DP,在回溯时,从子节点向节点x进行状态转移。例题:AcWing 285. 没有上司的舞会其实本题是一个原创 2022-03-17 00:02:28 · 950 阅读 · 0 评论