![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
treedp
Richard_for_OI
老年退役选手orz
展开
-
bzoj1017
参考了hzwer学长的blog。设P[x]表示物品带来的能量,L[x]、M[x]表示物品购买上限、单价(高级装备的L与M需要自己算)。L[x] = min(L[x], m/M[x]) 贫穷限制了购买力。f[i][j][k]表示在第i个物品为根的子树中,有j件x物品是用于上层的合成(那么这j件物品的能量值并不在此时体现),花费为k时带来的最大能量。显然对于基本装备,有:for(int i ...原创 2018-04-06 17:05:37 · 272 阅读 · 0 评论 -
所谓万能的树的直径
码一个万能的求树的直径的方法,在树上带负权时候用用,有点麻烦,但也算是dfs两次吧。我们试想一个问题,如果dfs两次,可能会导致如下现象:这样的话,两次dfs就错了(从1开始做,直接奔着4去)。于是我们考虑这样一个事情。如果对于树上的每个节点,我们都求出距离它最远的点以及他们间的距离,然后找出这n个距离中最大的一个,是不是就是直径呀。但是吧,说着都挺好的,但是这个距离哪那么好求啊!最早我想跑个最短...原创 2018-02-15 23:57:55 · 512 阅读 · 0 评论 -
谈虚树dp——bzoj2286与bzoj3572
Problem1一棵n个节点的有边权树,m次询问,每次问k个点。要求删除边权总和最小,使得这k个点均不与1连通。朴素Treedp考虑一个dp,dp[i]表示i这棵子树中,所有关键点均不与i连通的最小代价。有转移方程:(j是i的直系儿子)(1)j如果是关键点:f[i] = min(f[i], val[edge(i<=>j)])(2)otherwise,f[i] = min(f[i], f...原创 2018-06-03 22:40:15 · 670 阅读 · 0 评论