洛谷P3354 [IOI2005]Riv 河流——“承诺”DP
题目:https://www.luogu.org/problemnew/show/P3354
状态中要记录一个“承诺”,只需相同承诺之间相互转移即可;
然后就是树形DP的套路了。
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
int n,m,head[],ct,siz[],fa[],len[];
ll ed[],f[][][][];//点,伐木场个数,前伐木场,是否有伐木场
ll a[],c[][];//c:从i到j代价
struct N{
int to,next;
ll w;
N(int t=,int n=,ll w=):to(t),next(n),w(w) {}
}edge[];
void init(int cr,int cnt,ll dis,int nw)
{
c[cr][cnt]=dis*a[cr];
if(cnt)f[cr][][cnt][]=c[cr][cnt];
if(!nw)
{
len[cr]=cnt;return;
}
init(cr,cnt+,dis+ed[nw],fa[nw]);
}
void dfs(int x)
{
siz[x]=;
for(int j=;j<=n;j++)f[x][j][][]=;
for(int k=;k<=len[x];k++)f[x][][k][]=;
for(int i=head[x],v;i;i=edge[i].next)
{
dfs(v=edge[i].to);
for(int j=min(m,siz[x]+siz[v]);j>=;j--)
{
for(int k=;k<=len[x];k++)
{
f[x][j][k][]+=min(f[v][][k+][],f[v][][k+][]);
f[x][j][k][]+=min(f[v][][][],f[v][][][]);
for(int l=max(,j-siz[x]);l<=j&&l<=siz[v];l++)
{
f[x][j][k][]=min(f[x][j][k][],f[x][j-l][k][]+min(f[v][l][k+][],f[v][l][k+][]));
f[x][j][k][]=min(f[x][j][k][],f[x][j-l][k][]+min(f[v][l][][],f[v][l][][]));
}
}
}
siz[x]+=siz[v];
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=,x;i<=n;i++)
{
scanf("%lld%d%lld",&a[i],&x,&ed[i]);
edge[++ct]=N(i,head[x],ed[i]);head[x]=ct;
fa[i]=x;
}
memset(f,,sizeof f);f[][][][]=;//!
for(int i=;i<=n;i++)init(i,,,i);
dfs();
printf("%lld",f[][m][][]);
return ;
}
洛谷P3354 [IOI2005]Riv 河流——“承诺”DP的更多相关文章
- P3354 [IOI2005]Riv 河流
树形dp,设f[i][j][k]表示第i个点的子树中选择j个点作为伐木场,而且k是建了伐木场的最浅的i的祖先的情况下,最小的收益. 这种题还要练一下,咕咕 然后转移可以n4方做. // luogu-j ...
- [LUOGU] P3354 [IOI2005]Riv 河流
题目描述 几乎整个Byteland王国都被森林和河流所覆盖.小点的河汇聚到一起,形成了稍大点的河.就这样,所有的河水都汇聚并流进了一条大河,最后这条大河流进了大海.这条大河的入海口处有一个村庄--名叫 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 洛谷 P3177 [HAOI2015]树上染色 树形DP
洛谷 P3177 [HAOI2015]树上染色 树形DP 题目描述 有一棵点数为 \(n\) 的树,树边有边权.给你一个在 \(0 \sim n\)之内的正整数 \(k\) ,你要在这棵树中选择 \( ...
- 洛谷 P4072 [SDOI2016]征途 斜率优化DP
洛谷 P4072 [SDOI2016]征途 斜率优化DP 题目描述 \(Pine\) 开始了从 \(S\) 地到 \(T\) 地的征途. 从\(S\)地到\(T\)地的路可以划分成 \(n\) 段,相 ...
- BZOJ.1812.[IOI2005]Riv 河流(树形背包)
BZOJ 洛谷 这个数据范围..考虑暴力一些把各种信息都记下来.不妨直接令\(f[i][j][k][0/1]\)表示当前为点\(i\),离\(i\)最近的建了伐木场的\(i\)的祖先为\(j\),\( ...
- 洛谷P1880 石子合并(区间DP)(环形DP)
To 洛谷.1880 石子合并 题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分. 试设计出1 ...
- 洛谷P1063 能量项链(区间DP)(环形DP)
To 洛谷.1063 能量项链 题目描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的 ...
- 洛谷P1282 多米诺骨牌 (DP)
洛谷P1282 多米诺骨牌 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中 ...
随机推荐
- XCTFreverse第一道DMD
MD5解一次密即可
- Windows Server 远程桌面报错:No Remote Desktop License Servers Available
问题描述: 在用远程桌面访问Window Server服务器时,出现如下错误: The remote session was disconnected because there are no Rem ...
- 详解 CSS 七种三栏布局技巧
作者:林东洲 链接:https://zhuanlan.zhihu.com/p/25070186 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 三栏布局,顾名思义就是 ...
- centos的python2.6.x升级到python2.7.x方法;python2.6.x的版本就不要用了
python2.6.x的版本,现在使用的很多插件都不支持了.所以如果你的centos还是使用的2.6.x版本,不要犹豫,赶紧升级到2.7.x版本 1.所谓升级,就是再安装一个python2.7.x版本 ...
- jmeter.properties控制聚合报告的用户响应时间设置和smmary results
jmeter.properties的配置Summariser控制输出Summary Results,可以显式rt和tps等信息 Aggregate Report配置可以控制聚合报告的内容,控制90%用 ...
- 【Todo】ES6学习
今天部分分享,有一篇PPT,放在这里了 /Users/baidu/Documents/Data/Work/分享资料/ES6大法好.pptx 内容挺丰富的,可以学习.
- sklearn preprocessing data(数据预处理)
参考: http://scikit-learn.org/stable/modules/preprocessing.html
- HDU 1501
Zipper Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- vue - 前置工作
vue 中文官网:https://cn.vuejs.org/ vue ES6语法:https://www.cnblogs.com/zhouyangla/p/7225335.html vue Debug ...
- 嵌入式学习笔记(综合提高篇 第一章) -- 利用串口点亮/关闭LED灯
1 前言 从踏入嵌入式行业到现在已经过去了4年多,参与开发过的产品不少,有交换机.光端机以及光纤收发器,停车场出入缴费系统,二维码扫码枪,智能指纹锁以及数字IC芯片开发等; 涉及产品中中既有 ...