
树形dp
CR1SceNT
这个作者很懒,什么都没留下…
展开
-
BZOJ1040: [ZJOI2008]骑士
Portal每个人有一个讨厌的人,这两个人不能同时取,求点权值和最大。最大点权独立集嘛!网络流?(80’) 拆点,对于点x,S向x’连边,流量b[i],x”向T连边,流量为b[i],对于每一对不能同时取得点i,j,连边i’–>j”,j’–>i”,流量均为INF。答案=(∑b[i]*2-最小割)/2。 无聊测了一下,第九个点30w数据跑了50s。。100w的跑了…535s。。想正解。可以发现边数=原创 2017-02-27 15:36:35 · 398 阅读 · 0 评论 -
BZOJ4813: [Cqoi2017]小Q的棋盘
BZOJ4813这么和善的树形dp。。我TM都要借助题解完成!!考个p的省选啊。。 很容易想到用两个状态 f[i][j],g[i][j]f[i][j],g[i][j]分别表示从点ii开始往下走jj步且不用回到点ii的方案/回到点ii的方案。 。。然后我把转移想的贼复杂。。其实很容易的。。 f[x][j]=max(f[x][j],f[v][k−1]+g[x][j−k]);f[x][j]=max(原创 2017-04-13 22:37:01 · 781 阅读 · 0 评论 -
BZOJ4027: [HEOI2015]兔子与樱花
BZOJ4027一开始想的都是二维的dpdp。。数据这么大怎么转移啊QAQQAQ。 后来发现原来贪心就行辣。。。 直接记ansi=soni+cians_i=son_i+c_i,那么将这个点删除对应着其父节点+=ansi−1+=ans_i-1 那么对于某个点xx,将儿子的ansans值从小到大排徐,然后依次删直到不能删为止。 然后删下面的比删上面的优。 因为删某个点xx的儿子节点,有影响的只原创 2017-06-16 08:39:59 · 520 阅读 · 0 评论 -
BZOJ4169: Lmc的游戏
BZOJ416930分的暴力,当n<=10n<=10时,还是很好做的辣、 就是给每个叶子节点固定权值。然后树形dpdp就可以了,因为一个点被先手或是被后手取是确定的,就很好写了。n<=200000n<=200000时肯定就不能枚举了。。 既然无法确定叶节点权值,那么转化一下,dpdp不求具体值是多少,改为求第几大。 fxf_x表示当前点取最大的是第几大,gxg_x表示当前点取最小的是第几小。原创 2017-06-16 09:24:38 · 467 阅读 · 0 评论 -
BZOJ1907: 树的路径覆盖
BZOJ1907其实挺sbsb的一个树形dpdp。。我这种sbsb都会的树形dpdp。。 。。我的做法很鬼畜。 fx,0,fx,1f_{x,0},f_{x,1}分别表示点xx作为转折点(也就是连成一个VV字形)/非转折点,覆盖该子树的最小路径数。 记vv为xx的儿子节点,sum=∑min(fv,0,fv,1)sum=\sum min(f_{v,0},f_{v,1}). Mn,mnMn,mn为原创 2017-06-08 17:23:14 · 564 阅读 · 0 评论 -
BZOJ2427: [HAOI2010]软件安装
题目链接【分析】既然相互有依赖关系,那么缩点之后,就得到若干点和森林,建立树根,连向每一个单点和入度为0的点。树形dp。 (注意:对于任意一颗子树,选不了根下面的就都不能选)。(哎。。自己硬是把对的改成错的交了。。)【代码】#include <cstdio>#include <iostream>#include <queue>#include <vector>#include <algor原创 2016-12-28 15:09:28 · 267 阅读 · 0 评论