大逃杀(树上dp)
这道题和宝藏差不多吧,转移的时候比较麻烦的。
代码中分量很多种情况。
h更新比较麻烦
这两幅图表示了双边更新中3,4连个h更新,下面比较好理解的吧。
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio>
#define N 307
using namespace std; const int inf=; int n,m,ans=-inf;
int w[N],t[N];
int f[N][N],g[N][N],h[N][N];
int cnt,head[N],next[N*],rea[N*],val[N*]; void add(int u,int v,int fee)
{
next[++cnt]=head[u],head[u]=cnt;
rea[cnt]=v,val[cnt]=fee;
}
void dfs(int u,int fa)
{
for (int i=;i<=m;i++)
f[u][i]=g[u][i]=h[u][i]=(i>=t[u]?w[u]:-inf);//初始化
for (int i=head[u];i!=-;i=next[i])//这次均摊是O(1)
{
int v=rea[i],fee=val[i];
if (v==fa) continue;
dfs(v,u);
for (int j=m;j>=fee;j--)
for (int k=;k<=j-fee;k++)
{
int nowf=f[u][j],nowg=g[u][j],nowh=h[u][j];
if (j-*fee-k>=)
{
nowf=max(nowf,f[u][j-*fee-k]+f[v][k]);
nowg=max(nowg,g[u][j-*fee-k]+f[v][k]);
nowh=max(nowh,h[u][j-*fee-k]+f[v][k]);//图上注释
nowh=max(nowh,f[u][j-*fee-k]+h[v][k]);//图上注释
}
nowg=max(nowg,f[u][j-k-fee]+g[v][k]);//直接进入这个v结束
nowh=max(nowh,g[u][j-k-fee]+g[v][k]);//直接进入这个v结束
f[u][j]=nowf,g[u][j]=nowg,h[u][j]=nowh;
}
}
// cout<<u<<" "<<h[u][m]<<" "<<f[u][m]<<" "<<g[u][m]<<endl;
ans=max(ans,h[u][m]);
if (fa==-) printf("%d",ans);
}
int main()
{
memset(head,-,sizeof(head));
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d",&w[i]);
for (int i=;i<=n;i++) scanf("%d",&t[i]);
for (int i=,x,y,z;i<n;i++)
{
scanf("%d%d%d",&x,&y,&z);
add(x,y,z),add(y,x,z);
}
dfs(,-);
}
转移O(n^2),遍历O(n),然后就是O(n^3)
大逃杀(树上dp)的更多相关文章
- 绝地求生大逃杀BE启动失败,应用程序无法正常启动
今日更新绝地求生大逃杀后部分客户反馈绝地求生点击启动提示BE安装,应用程序无法启动 问题原因:经过排查发现,客户开启过超级工作站运行过游戏,在系统镜像包中保留了旧版的BE服务,致使新版BE无法安装,冲 ...
- 《绝地求生大逃杀》BE错误怎么办 BE服务未正常运行及安装失败解决方法
<绝地求生大逃杀>BattlEye Launcher是游戏的反作弊程序,也是启动过程中做容易出现错误的,今天小编带来“爆锤吧务”分享的<绝地求生大逃杀>BE服务未正常运行及安装 ...
- 洗礼灵魂,修炼python(41)--巩固篇—从游戏《绝地求生-大逃杀》中回顾面向对象编程
声明:本篇文章仅仅以游戏<绝地求生>作为一个参考话题来介绍面向对象编程,只是作为学术引用,其制作的非常简易的程序也不会作为商业用途,与蓝洞公司无关. <绝地求生>最近很火,笼络 ...
- [JZOJ 5819] 大逃杀
题意:求一个树上背包~~ 先贴代码存一下,好像打挂了. #include <bits/stdc++.h> using namespace std; const int maxn = 400 ...
- [BZOJ3611][Heoi2014]大工程(虚树上DP)
3611: [Heoi2014]大工程 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 2464 Solved: 1104[Submit][Statu ...
- bzoj 2286 [Sdoi2011]消耗战(虚树+树上DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2286 [题意] 给定一棵树,切断一条树边代价为ci,有m个询问,每次问使得1号点与查询 ...
- codevs 1421 秋静叶&秋穣子(树上DP+博弈)
1421 秋静叶&秋穣子 题目描述 Description 在幻想乡,秋姐妹是掌管秋天的神明,作为红叶之神的姐姐静叶和作为丰收之神的妹妹穰子.如果把红叶和果实联系在一 起,自然会想到烤红薯 ...
- BZOJ_1827_[Usaco2010 Mar]gather 奶牛大集会_树形DP
BZOJ_1827_[Usaco2010 Mar]gather 奶牛大集会_树形DP 题意:Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会.当然,她会选择最方便的地点来 ...
- 洛谷【P2458】[SDOI2006]保安站岗 题解 树上DP
题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下超市的所有通道呈一棵树的形状:某些通道之间可以互 ...
随机推荐
- mysqldumpslow及explain使用简介
- 微信程序开发系列教程(二)使用JavaScript给微信用户发送消息
我之前的文章 微信程序开发系列教程(一)开发环境搭建 介绍了微信开发环境的搭建,这篇文章我们就来一步步开发一些具体的功能. 功能需求:当有微信用户关注了您的公众号之后,您用JavaScript发送一个 ...
- ActiveAndroid问题no such table解决总结
android.database.sqlite.SQLiteException: no such table at android.database.sqlite.SQLiteConnection ...
- UVA 1151 Buy or Build (最小生成树)
先求出原图的最小生成树,然后枚举买哪些套餐,把一个套餐内的点相互之间边权为0,直接用并查集缩点.正确性是基于一个贪心, 在做Kruskal算法是,对于没有进入最小生成树的边,排序在它前面的边不会减少. ...
- QT 图形视图框架
https://blog.csdn.net/qq769651718/article/details/79357936 使用QPushButton.QLabel.QCheckBox等构成GUI的控件或自 ...
- layer的iframe层的传参和回参
从父窗口传参给iframe,参考://https://yq.aliyun.com/ziliao/133150 从iframe回参给父窗口,参考:https://www.cnblogs.com/jiqi ...
- mysql基本优化
文件打开数 show status like "%Open_files%" Open_files 133 show VARIABLES like "%open_files ...
- nxlog安装配置
Nxlog安装配置文档 任 帅 1.安装nxlog,全部默认即可. 如果拷贝直接安装,没有拷贝可以下载.下载链接: https://nxlog.co/system/files/products ...
- Linux菜鸟起飞之路【四】绝对路径、相对路径及常用目录
一.绝对路径与相对路径 Linux操作系统中存在着两种路径:绝对路径和相对路径.我们在访问文件或文件夹的时候,其实都是通过路径来操作的.两种路径在实际操作中能起到同等的作用. 在开始具体介绍之前,我们 ...
- cocos2d心得关于精灵帧缓存
在cocos2d中,精灵帧缓存CCSpriteFrameCache是用来存储精灵帧的.它没有特别的属性,只存储了一些用来管理CCSpriteFrame的方法. 以一个例子来说明,一般在又纹理图集的程序 ...