树形dp
Neo__Z
这个作者很懒,什么都没留下…
展开
-
bzoj2286 消耗战【虚树+树形dp】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2286解题思路: 假如只有一次询问,可以很好想到树形dp方程: 如果u是关键点,则f[u]=w(fa[u],u); 如果u不是关键点,则f[u]=min(w(fa[u],u),Σ\Sigma f[son[u]]); 但这样一次复杂度为O(n),则总复杂度为O(nm),显然超时。像这种每原创 2017-10-10 14:51:23 · 306 阅读 · 0 评论 -
bzoj5252 [九省联考 2018] 林克卡特树【动态规划+二分凸包】
解题思路:首先分析题意:就是求k+1k+1k+1条不相交的链,使其权值和最大。第一个反应肯定是用费用流做,那么费用流有什么性质呢? 考虑增广过程,相当于每次都新找一条链出来(也会影响原来的链),不妨设找iii条链的最优答案为AnsiAnsiAns_i,那么有Ansi−Ansi−1≥Ansi+1−AnsiAnsi−Ansi−1≥Ansi+1−AnsiAns_i-Ans_{i-1}\ge A...原创 2018-05-02 14:22:44 · 456 阅读 · 0 评论 -
bzoj4182: Shopping【点分治+单调队列优化多重背包】
题目大意:给定一棵有 n 个点的树,第 i 个点有 di 件商品,价格为 ci,价值为 wi。 你手头有 m 块钱,且你要保证你买过的点在树上互相连通,问买到的物品的总价值最多是多少。 1 ≤ n ≤ 500, 1 ≤ m ≤ 4000, di ≤ 100。 解题思路:如果直接树形dp是O(nm2d)O(nm2d)O(nm^2d)的,显然过不了考虑如果强制要选一个点怎么做。 ...原创 2018-05-17 21:35:18 · 503 阅读 · 0 评论 -
UOJ#205. 【APIO2016】Fireworks【动态规划+折线优化+可并堆】
题目大意:给出一棵树,边有边权,可以花费1的代价把一条边的权值加1或者1,不能减到负的。 要让根到所有叶子的边权和都相等。问最小代价。 n<=600000解题思路:设 fx(i)fx(i)f_x(i) 表示 xxx 的子树中的叶子到 xxx 距离全部搞成 iii 的最小代价。 设 gx(i)gx(i)g_x(i)表示 xxx 的子树中的叶子到 faxfaxf...原创 2018-05-18 11:32:10 · 331 阅读 · 0 评论 -
BJ模拟 tree【树形dp】
题目描述:给一棵 nnn 个节点的边带权树,要求在树上选出 kkk 个点 a1,a2,...,aka1,a2,...,aka_1,a_2,...,a_k,使得 ∑k−1i=1dis(ai,ai+1)∑i=1k−1dis(ai,ai+1)\sum_{i=1}^{k-1}dis(a_i,a_{i+1})最小。1≤k≤n≤30001≤k≤n≤30001\le k\le n\le 3000解题思路...原创 2018-05-05 15:33:32 · 179 阅读 · 0 评论 -
bzoj5314: [Jsoi2018]潜入行动【树形dp】
Description外星人又双叒叕要攻打地球了,外星母舰已经向地球航行!这一次,JYY已经联系好了黄金舰队,打算联合所有JSO Ier抵御外星人的进攻。在黄金舰队就位之前,JYY打算事先了解外星人的进攻计划。现在,携带了监听设备的特工 已经秘密潜入了外星人的母舰,准备对外星人的通信实施监听。外星人的母舰可以看成是一棵n个节点、n-1条边的 无向树,树上的节点用1,2…n编号。JYY的特...原创 2018-05-15 07:38:18 · 1120 阅读 · 1 评论 -
bzoj5315: [Jsoi2018]防御网络 【树形dp】
传送门解题思路:注意到该图是一棵树上多了几个不相交的环。 考虑每条边的贡献。 对于一条树边(桥),只要两边有点那就要选。 对于一个环,其贡献的长度就是环长减去最长的空段,可以枚举最长空隙和起点dp,详见代码。时间复杂度O(n3)O(n3)O(n^3)#include<bits/stdc++.h>#define ll long longusing namespa...原创 2018-05-15 07:43:35 · 718 阅读 · 0 评论 -
bzoj5290: [Hnoi2018]道路【树形dp/记忆化搜索】
传送门解题思路:考试时刚看以为是神仙题,于是开始打dfs暴力,然后猛然发现可以记忆化,然后就没有然后了……这不是普及组dp吗? f[i][x][y]f[i][x][y]f[i][x][y]表示以iii为根的子树,上面有xxx条公路,yyy条铁路未翻新的最优值,记忆化搜索即可。#include<bits/stdc++.h>#define ll long longus...原创 2018-05-08 17:42:17 · 262 阅读 · 0 评论 -
loj#2537. 「PKUWC 2018」Minimax【概率dp+线段树合并】
传送门解题思路:感觉自己当时好菜啊……设 fu,ifu,if_{u,i} 为 uuu 选 iii 的概率,假如是从左子树转移来的,则fu,i=fl,i(p∑fr,j<i+(1−p)∑fr,j>i)fu,i=fl,i(p∑fr,j<i+(1−p)∑fr,j>i)f_{u,i}=f_{l,i}(p\sum f_{r,ji}) 然后想到线段树合并,节点表示选当前区...原创 2018-05-29 07:53:38 · 1127 阅读 · 0 评论 -
SPOJ PT07D :Let us count 1 2 3 【树的计数】
传送门解题思路:四种树的计数方式: 1.有标号无根树:根据prufer序列可知是nn−2nn−2n^{n-2}2.有标号有根树:一棵有标号无根树以每个节点为根 ,所以是nn−1nn−1n^{n-1}3.无标号有根树:设 fifif_i 表示树的大小为 iii 的方案数,其生成函数是 F(x)=∑fixiF(x)=∑fixiF(x)=\sum f_i x^i 考虑到一棵无...原创 2018-05-24 15:26:07 · 881 阅读 · 0 评论 -
bzoj5287: [Hnoi2018]毒瘤【虚树+树形dp】
传送门解题思路:首先如果图是一棵树,那么: f[u][0]=∏(f[v][0]+f[v][1]),f[u][1]=∏f[v][0]f[u][0]=∏(f[v][0]+f[v][1]),f[u][1]=∏f[v][0]f[u][0]=\prod(f[v][0]+f[v][1]),f[u][1]=\prod f[v][0]如果多了几条非树边,可以暴力枚举这几条边端点的状态,即强制选A不选...原创 2018-05-09 10:11:19 · 468 阅读 · 0 评论 -
BJ模拟 随机游走【期望dp+倍增】
题目描述给定一棵n个节点的树,一个人在树上随机游走,即从一个点等概率走到相邻的一个点,m组询问,问从x走到y的期望。 n≤100000n≤100000n\le 100000解题思路:树上概率期望一般设两个值,一个从自己到父亲,一个从父亲到自己。 设fifif_i表示从iii走到fa[i]fa[i]fa[i]的期望步数,k=degik=degik=deg_i,则:fi=1k+∑1...原创 2018-04-13 15:51:44 · 1183 阅读 · 0 评论 -
Codeforces-337D Book of Evil【树形dp】
解题思路:其实就是对于每个点维护它到最远关键点的距离,最后看该距离是否小于d即可。 每个点维护三个值:dis1(到子树中关键点距离的最大值),dis2(到子树中关键点距离的次大值),disup(到不在其子树中关键点距离的最大值)。#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algor原创 2017-10-23 14:26:36 · 342 阅读 · 0 评论 -
bzoj4446 小凸玩密室【树形dp】
知道如何设状态很重要。 设f[i][j]表示走完i为根的子树然后走到j的代价。很显然这样是过不了的。 考虑修改上面的状态。这要从如何求答案开始想。如果我已经求出了f数组,那么枚举起点,肯定是先走它的子树,然后走到它的父亲,接下来遍历它的父亲的另一个子树,然后走到父亲的父亲,以此类推。 那么可以发现很多状态是没用的。修改:f[i][j]表示走完i为根子树后走到深度为j的祖先的另一个儿子的代价(不包原创 2017-10-25 07:45:39 · 312 阅读 · 0 评论 -
NOIP模拟 探险 【树形dp】
题目描述国家探险队长 Jack 意外弄到了一份秦始皇的藏宝图,于是,探险队一行人便踏上寻宝之旅,去寻找传说中的宝藏。藏宝点分布在森林的各处,每个点有一个值,表示藏宝的价值。它们之间由一些小路相连,小路不会形成环,即两个藏宝点之间有且仅有一条道路。探险队从其中的一点出发,每次他们可以留一个人在此点开采宝藏,也可以不留,然后其余的人可以分成若干队向这一点相邻的点走去。需要注意的是,如果他们把队伍分成两队原创 2017-10-25 11:15:26 · 369 阅读 · 0 评论 -
hdu 5293 Tree chain problem【树状dp+dfs序+树状数组】
题目大意:在一棵树中,给出若干条链和链的权值,求选取不相交的链使得权值和最大。解题思路:树形DP。设dp[i]表示i的子树下的最优权值和,sum[i]表示不考虑i点时子树的最优权值和,即(j是i的儿子),显然dp[i]>=sum[i]。那么问题是考虑i点时dp[i]的值是多少,假设有一条链通过i,且端点a和b都在i的子树里,即LCA(a,b)=i,如果考虑加上这条链的权值,那么a->i, b->i的原创 2017-10-16 14:49:10 · 393 阅读 · 0 评论 -
hdu4616 Game 【树形dp】
题解详见:http://blog.csdn.net/martinue/article/details/51025232 分析透彻。#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<vector>#include<qu原创 2017-10-25 21:23:24 · 299 阅读 · 0 评论 -
51nod1673 树有几多愁 【虚树+树形dp+状压dp】
题目描述lyk有一棵树,它想给这棵树重标号。 重标号后,这棵树的所有叶子节点的值为它到根的路径上的编号最小的点的编号。 这棵树的烦恼值为所有叶子节点的值的乘积。 lyk想让这棵树的烦恼值最大,你只需输出最大烦恼值对1e9+7取模后的值就可以了。 注意一开始1号节点为根,重标号后这个节点仍然为根。数据保证叶子节点个数<=20。例如样例中,将1,2,3,4,5重标号为4,3,1,5,2,此时原来原创 2017-10-22 21:00:16 · 528 阅读 · 0 评论 -
bzoj1023 仙人掌图【仙人掌&&树形dp】
解题思路:f[i]表示以i为根的子树中i为起点的最长链。若(u,v)是桥,则ans=max(ans,f[u]+f[v]+1)(此时f[u]还未被f[v]更新),接着f[u]=max(f[u],f[v]+1);这也是树的直径的一种解法。若u是环上的一个点,设该环大小为cnt,则ans=max(ans,f[u]+f[v]+dis(u,v))其中v也为该环上一点且dis(u,v)<=cnt/2(不然就走环原创 2017-11-22 16:52:47 · 329 阅读 · 0 评论 -
bzoj3566 概率充电器【树形期望概率dp】
解题思路:一个节点要么被父亲充上电,要么儿子或自己充上电。 我们发现求充得上电的概率要用概率加法,有点麻烦,所以可以求一个点充不上电的概率,也就是任何一个来源都不能有电,概率直接相乘即可。设f[i]f[i]表示由son[i]son[i]不能充电且自己直接充不上电的概率; 设g[i]g[i]表示由父亲充不上电的概率。 设h[i]h[i]表示由ii不能给父亲充电的概率,要么是ii就充不上电,要么(原创 2018-01-03 17:41:27 · 428 阅读 · 0 评论 -
bzoj3743: [Coci2015]Kamp【树形dp】
Description一颗树n个点,n-1条边,经过每条边都要花费一定的时间,任意两个点都是联通的。 有K个人(分布在K个不同的点)要集中到一个点举行聚会。 聚会结束后需要一辆车从举行聚会的这点出发,把这K个人分别送回去。 请你回答,对于i=1~n,如果在第i个点举行聚会,司机最少需要多少时间把K个人都送回家。Input第一行两个数,n,K。 接下来n-1行,每行三个数,x原创 2018-02-06 19:43:51 · 271 阅读 · 0 评论 -
bzoj5250 九省联考 秘密袭击【树上背包+拉格朗日插值+线段树合并】
解题思路:第一个想法是枚举第kkk大的值,把大于的记为1,小于的记为0,问题就转化为树上联通块大小等于kkk的个数。稍微转化一下,我们统计树上联通块第kkk大大等于iii的个数,不妨记为aiaia_i,那么 ans=∑i=1Wi(ai−ai+1)ans=∑i=1Wi(ai−ai+1)ans=\sum\limits_{i=1}^Wi(a_i-a_{i+1})而因为这样计算每个大等于ii...原创 2018-04-18 17:17:11 · 788 阅读 · 0 评论 -
loj#2542. 「PKUWC 2018」随机游走
传送门解题思路:Min-Max容斥真神奇……然而不知如何证明……设 Max(s)Max(s)Max(s) 表示集合里最晚被访问的节点被访问的期望步数(也就是访问所有节点的期望步数)。设 Min(s)Min(s)Min(s) 表示集合里最早被访问的节点被访问的期望步数(也就是第一次访问到集合里的节点的期望步数)那么 Max(s)=∑T∈S(−1)|T|+1Min(T)Ma...原创 2018-05-29 17:08:37 · 781 阅读 · 0 评论