![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树形DP
文章平均质量分 73
ACM败犬
这个作者很懒,什么都没留下…
展开
-
[cogs2652]秘术「天文密葬法」(01分数规划,长链剖分(继承时每个深度需要加上 val[u] 的处理))
题目大意:给你一棵树,每个点有两个权值ai,bia_i,b_iai,bi,你需要找出一条长为m的路径(指路径上点的个数为 m 个),最小化∑ai∑bi\frac{\sum a_i}{\sum b_i}∑bi∑ai。题解:这个式子以及题意就是01分数规划的形式。前缀技能:01分数规划01分数规划对应有一些元素,你需要从中选出 kkk 个,使得∑ai∑bi\displaystyle\...原创 2019-11-07 20:59:40 · 180 阅读 · 0 评论 -
[BZOJ4543][POI2014]Hotel加强版(长链剖分(长链剖分优化树形DP))
题目大意:在一棵无边权的树上选三个点,使得两两点对的距离相等,问有多少种选法。题解:答案的形式必然如图所示,当确定两个点,这两个点到其 lca 的距离都等于 ppp,那么第三个点一定来自不同子树,且到 lca 的距离也等于 ppp考虑树形 dp:当前根结点为 u,合并第 i 棵子树时:在前 i - 1 棵子树里找一个点 zzz,在第 i 棵子树里找一个点对 (x,y)(x,y)(x,y),...原创 2019-11-07 19:40:43 · 166 阅读 · 0 评论 -
HDU 6540 Neko and tree(树形DP,计数类DP)
题目大意:树上有 m 个关键点,选出一部分点,使得任意一对点间的距离不大于 kkk,问有多少种选法。容易想到构造状态 dp[u][dep]dp[u][dep]dp[u][dep] 表示在 uuu 结点为根结点的子树中选的结点深度不大于 depdepdep 的方案总数。这题的状态构造方法类似于 https://codeforc.es/contest/1249/problem/F不过这题是计...原创 2019-10-26 23:42:33 · 287 阅读 · 0 评论 -
Codeforce 1249 F. Maximum Weight Subset(树形DP)
题目大意:从一棵树上选一个点集,任意两点的距离不能小于等于 k,使得这个点集的权值和最大。实际上也不是很难,一开始以为树形DP做不了,后来想了一下如果能构建一个状态 dp[u][dep]dp[u][dep]dp[u][dep] 表示在 uuu 结点为根的子树中选出的点的深度不小于 depdepdep 并且满足距离大于 kkk 这个限制的最大点权和。很容易想到为什么要构建这个状态,假设以 ...原创 2019-10-26 00:44:10 · 237 阅读 · 0 评论 -
洛谷 P4827 [国家集训队] Crash 的文明世界(第二类斯特林数 + 树形DP + 思维)
代码:#include<bits/stdc++.h>using namespace std;const int maxn = 5e4 + 100;const int mod = 10007;int n,k;vector<int> g[maxn];int S[300][300],dp[maxn][300],pw[maxn];int cur[300];v...原创 2019-09-27 00:31:04 · 152 阅读 · 0 评论 -
gym 101889 :G.Gates of uncertainty(树形dp)
题目大意:有一堆逻辑门,它的逻辑满足下图一堆逻辑门构成的一个逻辑图是一个树形图(显然),例如:现在有些逻辑门出现了故障,有些逻辑门固定输出1,有些逻辑门固定输出0。求有多少种输入对应的输出是不正确的?这个题显然可以用树形DP做,先考虑最后答案怎么得到:用根节点原本要输出 0,但实际上输出1的输入数量(下面称它为错误输出 1)加上 原本要输出1实际输出0的输入数量(称它为错误输出 0)。...原创 2019-09-21 21:38:21 · 168 阅读 · 0 评论 -
Codeforce 1099 F. Cookies(树形DP + 线段树预处理)
题目大意:在一棵有根树上,每个点有 x[i] 个饼干,在第 i 个点吃饼每块饼干要花 t[i] 的时间。现在有两个玩家 a,b,总共有T时间。a 初始在根节点,每次可以沿着树边走向子结点,每次移动都要花费一定的时间,a也可以结束游戏 ,当他结束游戏时,他开始向根结点返回,在返回途中他可以吃饼,但最后必须回到根节点。当 a 移动到 结点 i 时,b 可以选择删掉从 i 出发到其子节点的一条边。...原创 2019-09-03 10:40:17 · 125 阅读 · 0 评论 -
*2019 Multi-University Training Contest 3 :Squrirrel(树形DP + 两次扫描换根法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6613题意:转换过来就是:问你删掉一条边后,距离最远的两个点的距离最近是多少。如果没有删边是比较简单的树形DP,dp[i][0] 表示 i 到 子树叶子结点的最远距离,dp[i][1] 表示 i 到子树叶子结点的第二远距离。然后用树形DP 两次换根扫描 求出所有点的答案,找最小值。要删一条边:其实...原创 2019-08-03 15:37:51 · 204 阅读 · 0 评论 -
POJ 3585 :Accumulation Degree (树形DP + 两次扫描换根法)
题目大意:给你一棵树,每条边有一个最大容量,根结点可以流出无限的流,叶子结点可以接收无限多的流,问你以哪一个点为原点整棵树的总容量最大。其实就是在问以那个点为原点最大流最大,数据很大肯定不是用最大流算法来跑 n 遍,因为整体结构是一棵树,容易想到两次DFS处理出每一个点作为根节点的最大流,再找答案。(所谓两次扫描换根法就是两次DFS扫描得到每一个点作为根结点的解,了解之后发现就是自己用过的东...原创 2019-07-19 21:23:00 · 261 阅读 · 0 评论 -
HDU 5909 : Tree Cutting(树形DP + FWT优化)
题目大意:有一棵树有n个结点,每个结点有一个权值,定义一棵树的值为所有结点的值的异或和,让你输出[0,m - 1]内,每个值 iii 有多少种子树的值等于 iii。题解:考虑树形dp,另dp[i][j]表示以iii为根节点,异或和为jjj的方案数,转移是一个二重循环,复杂度达到 m2m^2m2void dfs(int u,int fa) { dp[u][val[u]] = 1; ...原创 2019-07-11 21:12:14 · 187 阅读 · 0 评论 -
CF_1101_problem_D:GCD Counting(树形dp OR 树点分治)
题目大意:给出了一棵树,每棵树有一个权值,定义dist(x,y)为x到y的简单路径经过的结点的个数。定义gcd(x,y) 为x到y的简单路径上所经过的所有点的点权的最大公因数。现在问满足gcd(x,y) 大于 1的条件下,dist(x,y)的最大值是多少。数据量和数据值均为2e5,因此每个数的素因子不超过7种。先谈树形dp:路径上gcd大于1表示存...原创 2019-03-24 21:14:18 · 280 阅读 · 0 评论 -
洛谷P1273_有线电视网:树形背包dp
题目大意: 某收费有线电视网计划转播一场重要的足球比赛。他们的转播网和用户终端构成一棵树状结构,这棵树的根结点位于足球比赛的现场,树叶为各个用户终端,其他中转站为该树的内部节点。从转播站到转播站以及从转播站到所有用户终端的信号传输费用都是已知的,一场转播的总费用等于传输信号的费用总和。现在每个用户都准备了一笔费用想观看这场精彩的足球比赛,有线电视网有权决定给哪些用户提供信号而不给哪些用户提供信...原创 2019-03-25 22:43:10 · 133 阅读 · 0 评论 -
树形dp+dp总结(待续)
最近学了一下树形dp。主要做过:树形背包,树上路径,点覆盖,最大独立集,支配集这几类树形dp的题。总的来说,树形dp因为是树,子问题特别明显,可以在dfs时直接考虑如何转移,具体题目还是具体分析。有时转移会具有后效性,但可以通过其他方式消除(支配集就是一个很好的例子),有关树形dp的一些博客题解放在了前面,这篇就到这吧。最后心得:其实关于dp都是这样,一般从状态或者从决策入手,有时也可以从...原创 2019-04-04 11:24:12 · 309 阅读 · 0 评论 -
codeforce 1152 (round 554) DIV2:D. Neko and Aki's Prank (思维 + dp + 贪心)
题意:有n对括号,把这n对括号所有合法的匹配画在字典树上,字典树的每一个结点都是合法的括号匹配(即任意一个前缀左括号数量大于等于右括号),问这棵字典树上不相交边集的最大数量是多少?解法:明白题意和字典树概念后,似乎可以用树形dp搞,建树是不可能建的,一看模数1e9 + 7,那么只能凭空想象然后在虚树上进行dp了,手画了一下第三个样例的字典树,有21个结点,贪心的从叶子结点开始选连接到它的边,一层...原创 2019-04-26 19:24:58 · 193 阅读 · 0 评论 -
Codeforces Round #551 (Div. 2) :D Serval and Rooted Tree(贪心 + 树形dp)
题目大意:给出一棵树,1号结点为根节点,设该树有k个叶子结点,叶子结点的值可以任意赋值,但必须用[1,k]范围内的数,且每个数只能用一次,除此之外每个结点还有一个权值,权值1代表该结点的值为儿子结点中权值最大的一个值,权值0表示该点的值为儿子结点中最小的值。现在问根节点的最大值是多少?解法:问题可以转变为,至少要设置多少个叶子结点的值才能使得根节点有值?(看到这句话是否恍然大悟?)若放x个叶子结...原创 2019-05-02 20:44:45 · 104 阅读 · 0 评论 -
Educational Codeforces Round 64 (Rated for Div. 2) :D. 0-1-Tree (树形dp)
题目大意:给一棵只有0边权的树和1边权的树,问有多少个点对(x,y),使得从x到y的简单路径满足:一旦经过1边权的边,就不再经过1边权的边。解法:树形dp或树分治这题一看就是可以树形dp搞或树分治搞,树分治太麻烦了,又不好写,一般都用树形dp取代,除非万不得已。考虑树形dp的做法:显然还是先对问题进行分解,把路径分成经过根节点的路径,dfs处理所有点为根节点的情况得到答案。考虑每一个子问题:...原创 2019-05-05 17:14:26 · 128 阅读 · 0 评论