P3354 [IOI2005]Riv 河流
树形dp,设f[i][j][k]表示第i个点的子树中选择j个点作为伐木场,而且k是建了伐木场的最浅的i的祖先的情况下,最小的收益。
这种题还要练一下,咕咕
然后转移可以n4方做。
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return x*f;
}
int n,K,W[110],fa[110];
int fir[110],dis[110],nxt[110],id;
int w[110][110];
il vd link(int a,int b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b;}
ll f[110][51][110],g[110][51][110];
int dep[110],stk[110],tp;
il vd dp(int x){stk[++tp]=x;for(int i=fir[x];i;i=nxt[i])dep[dis[i]]=dep[x]+w[dis[i]][1],dp(dis[i]);for(int tt=fir[x];tt;tt=nxt[tt]){int t=dis[tt];for(int k=1;k<=tp;++k)for(int i=K;~i;--i){//一共选i个f[x][i][stk[k]]+=f[t][0][stk[k]];g[x][i][stk[k]]+=f[t][0][x];for(int j=1;j<=i;++j){//t子树选j个f[x][i][stk[k]]=std::min(f[x][i][stk[k]],f[x][i-j][stk[k]]+f[t][j][stk[k]]);g[x][i][stk[k]]=std::min(g[x][i][stk[k]],g[x][i-j][stk[k]]+f[t][j][x]);}}}for(int i=1;i<=tp;++i)for(int j=0;j<=K;++j){f[x][j][stk[i]]+=W[x]*(dep[x]-dep[stk[i]]);if(j)f[x][j][stk[i]]=std::min(f[x][j][stk[i]],g[x][j-1][stk[i]]);}--tp;
}
int main(){n=gi(),K=gi();for(int i=1;i<=n;++i)W[i]=gi(),fa[i]=gi(),w[i][1]=gi(),link(fa[i],i);for(int i=1;i<=n;++i)for(int j=2;j<=n;++j)w[i][j]=w[fa[i]][j-1]+w[i][1];dp(0);printf("%lld\n",f[0][K][0]);return 0;
}
转载于:https://www.cnblogs.com/xzz_233/p/10040325.html
P3354 [IOI2005]Riv 河流相关推荐
- 洛谷P3354 [IOI2005]Riv 河流——“承诺”DP
题目:https://www.luogu.org/problemnew/show/P3354 状态中要记录一个"承诺",只需相同承诺之间相互转移即可: 然后就是树形DP的套路了. ...
- [LUOGU] P3354 [IOI2005]Riv 河流
题目描述 几乎整个Byteland王国都被森林和河流所覆盖.小点的河汇聚到一起,形成了稍大点的河.就这样,所有的河水都汇聚并流进了一条大河,最后这条大河流进了大海.这条大河的入海口处有一个村庄--名叫 ...
- 洛谷 P3354 [IOI2005]Riv 河流【树形dp】
... 题目: 题意: 分析: 代码: 题目: 传送门 题意: 给出一棵有nnn个节点的树,每条边有一个距离,每个点有一个权值 我们需要选出除根节点以外的kkk个节点,每个点的答案为该点的点权向上直到 ...
- Luogu P3354 [IOI2005]Riv河流 题解———再加一维!再加一维!
Description n≤100,k≤min(n,50)n≤100,k≤min(n,50)n≤100,k≤min(n,50). Solution 考虑树形dpdpdp. 状态设计为dpi,jdp_{ ...
- [IOI2005]Riv 河流
题目描述 几乎整个Byteland 王国都被森林和河流所覆盖.小点的河汇聚到一起,形成了稍大点的河.就这样,所有的河水都汇聚并流进了一条大河,最后这条大河流进了大海.这条大河的入海口处有一个村庄--B ...
- 『树形DP』[IOI2005]Riv 河流
题目描述 题解 我们设f[x][j][k]f[x][j][k]f[x][j][k]表示运输完了以xxx为根的子树,iii的祖先jjj建立了伐木场,建立了kkk个伐木场的最小运输代价.由于题目中说明了0 ...
- [IOI2005]Riv河流
题目链接:洛谷,BZOJ 前置知识:莫得 题解 直接考虑dp.首先想法是设状态 \(dp[u][i]\) 表示u的子树内建 \(i\) 个伐木场且子树内木头都运到某个伐木场的最小花费.发现这样的状态是 ...
- BZOJ.1812.[IOI2005]Riv 河流(树形背包)
BZOJ 洛谷 这个数据范围..考虑暴力一些把各种信息都记下来.不妨直接令\(f[i][j][k][0/1]\)表示当前为点\(i\),离\(i\)最近的建了伐木场的\(i\)的祖先为\(j\),\( ...
- 【bzoj 1812】[Ioi2005]riv(树形dp)
1812: [Ioi2005]riv Time Limit: 10 Sec Memory Limit: 64 MB Submit: 433 Solved: 246 [Submit][Status] ...
最新文章
- pandas使用groupby函数计算dataframe数据中每个分组的N个数值的滚动最大值(rolling max)、例如,计算某公司的多个店铺每N天(5天)的滚动销售额最大值
- python能够处理的最大整数是多少_python中能输出的最大整数位是多少
- ruby安装插件报错
- python-装饰器实现pv-uv
- cocos2dx进阶学习之CCTMXLayer
- 给easyui datagrid 添加mouseover和mouseout事件
- 【华为云技术分享】气象模拟WRF容器化操作实践
- Spring JMS 整合 ActiveMQ
- 使用mathematica求解最优化模型
- ios app真机测试到上架App Store详细教程-必看
- Error:(3, 50) java: 程序包com.n.c.caa.cds.commons.constants不存在
- Hbuilder上架苹果app流程(上)
- 免服务器软件库源码实现超级管理动态发布会员系统卡密系统充值对接卡密网软件发布板块后台功能 软件商店1.3.1
- GNSS/INS组合导航(2)-加速度计选型参数解析
- 路由器的两种工作模式~~~
- 网友评价 iPhone 8:大爱玻璃后壳、True Tone 屏幕
- 使用matlab将nc文件转成tif文件
- 【机器学习】线性判别式(LDA/FLD)
- android 启动页主题_如何使用主题和启动器个性化您的Android手机
- 2bc-gskew:De-aliased hybrid branch predictors(1999)
热门文章
- Specified VM install not found: type Standard VM, name jre7
- 京东校招java面试题_京东2018校招编程题解答(Java)
- Kvm*虚机中创建虚机
- 51nod-2534 最小旅行路线
- 如果楼市崩盘我们怎么活?(续集)
- zhong yu gong si
- 源码天空java新闻_Java UpdateRequest类代码示例
- Android10支持volte,Nemo_LG V35 安卓10.0解锁Volte(联通、电信、移动)教程_Nemo社区_LinkNemo_关于分享和探索的好地方...
- 各种OJ网站,刷题必备
- unity初学6——简易的UI制作(血条制作)和音频加入以及NPC的对话气泡(2d)