小游戏
题目描述
有一个简单的小游戏。游戏的主人公是一个勇士,他要穿过一片黑森林,去
解救公主。黑森林的地图可以用一张 V 个点、E 条边的无向图来描述,起点是 1
号点,终点是 V 号点。勇士从起点出发,出发时 HP 为 M,每单位时间可以选
择一条连接当前点的边,到达另一个点。图的边上有荆棘毒刺,而点上有供休憩
的小木屋,勇士每经过一条边会损失一定的 HP,每到达一个点则会回复一定的
HP。当 HP≤0 时,勇士死亡;HP 的上限为 M,当某一次休憩后 HP>M 时,
HP 将只能保留 M。勇士要在保证存活的前提下,尽快地到达目的地。
zzh 玩着这个小游戏,脑海里又浮现出她的微笑……他决定,一定要把游戏
玩通关!可是,随着关卡的进行,游戏的地图越来越大了……
输入格式
第一行三个整数,V、E、M。
第二行 V 个整数,第 i 个数表示第 i 个点每经过一次增加的 HP 值 R[i]。
接下来 E 行,每行三个整数 x、y、z,表示 x 号点到 y 号点有一条边,每经
过一次消耗 z 的 HP。
输出格式
一行一个整数,表示到达终点的最少时间。若无法到达,则输出-1。
输入样例
5 5 3
3 2 3 2 3
1 5 4
1 2 1
2 3 2
3 4 1
4 5 2
输出样例
4
样例解释
走路径 1——2——3——4——5。数据范围
测试点编号 V= E= M= z∈ R[i]∈
1
2 5 10 10 [0,20] [0,3]
3
4 20 50 20 [0,40] [0,10] 5 100 500 20
6 500 1000 500 [0,500] [0,200] 7 1000 5000 1000 [0,3000]
8 10000 50000 10000 [0,10000]
9 [0,100] 30000 100000 20000 [0,20000] 10
对于 100%的数据,保证图结构随机生成,保证 z 和 R[i]在对应范围内随机
生成。
 
sol:

考虑用 SPFA 迭代计算到达每个点存活且残余的最大 HP。考虑到 SPFA 本
身是一个广搜的过程,自然也可以类似广搜地统计最少时间。因此,直接跑 SPFA
即可。时间复杂度 O(EAns)。
 
#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=; bool f=; char ch=' ';
while(!isdigit(ch)) {f|=(ch=='-'); ch=getchar();}
while(isdigit(ch)) {s=(s<<)+(s<<)+(ch^); ch=getchar();}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<) {putchar('-'); x=-x;}
if(x<) {putchar(x+''); return;}
write(x/); putchar((x%)+'');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=,M=;
int n,m,mxhp,r[];
int tot=,Next[],to[],val[],head[];
inline void Link(int x,int y,int z)
{
Next[++tot]=head[x]; to[tot]=y; val[tot]=z; head[x]=tot;
}
int tou,wei;
struct Node
{
int x,Hp,dis;
}Que[];
int arr[];
bool bo[N];
inline int bfs()
{
int i; tou=; wei=;
memset(arr,-,sizeof arr);
Que[++wei]=(Node){,mxhp,}; arr[]=mxhp;
for(;tou<=wei;)
{
Node tmp=Que[tou++]; if(tmp.x==n) return tmp.dis;
arr[tmp.x]=max(arr[tmp.x],tmp.Hp);
for(i=head[tmp.x];i;i=Next[i]) if(tmp.Hp>val[i])
{
int oo=min(tmp.Hp-val[i]+r[to[i]],mxhp);
if(arr[to[i]]<oo)
{
arr[to[i]]=oo;
Que[++wei]=((Node){to[i],oo,tmp.dis+});
}
}
}
return -;
}
int main()
{
freopen("game.in","r",stdin);
freopen("game.out","w",stdout);
int i,x,y,z;
R(n); R(m); R(mxhp);
for(i=;i<=n;i++) R(r[i]);
for(i=;i<=m;i++)
{
R(x); R(y); R(z); if(z<mxhp) {Link(x,y,z); Link(y,x,z);}
}
Wl(bfs());
return ;
}

7.26T3小游戏的更多相关文章

  1. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  2. 拼图小游戏之计算后样式与CSS动画的冲突

    先说结论: 前几天写了几个非常简单的移动端小游戏,其中一个拼图游戏让我郁闷了一段时间.因为要获取每张图片的位置,用`<style>`标签写的样式,直接获取计算后样式再用来交换位置,结果就悲 ...

  3. 推荐10款超级有趣的HTML5小游戏

    HTML5的发展速度比任何人的都想像都要更快.更加强大有效的和专业的解决方案已经被开发......甚至在游戏世界中!这里跟大家分享有10款超级趣味的HTML5游戏,希望大家能够喜欢! Kern Typ ...

  4. 如何开发一个简单的HTML5 Canvas 小游戏

    原文:How to make a simple HTML5 Canvas game 想要快速上手HTML5 Canvas小游戏开发?下面通过一个例子来进行手把手教学.(如果你怀疑我的资历, A Wiz ...

  5. JavaScript版拼图小游戏

    慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...

  6. C语言-纸牌计算24点小游戏

    C语言实现纸牌计算24点小游戏 利用系统时间设定随机种子生成4个随机数,并对4个数字之间的运算次序以及运算符号进行枚举,从而计算判断是否能得出24,以达到程序目的.程序主要功能已完成,目前还有部分细节 ...

  7. Cocos2d-x 版本小游戏 《是男人就下100层》 项目开源

    这个是很久就开始动手写的一个小游戏了,直到最近才把它收尾了,拖拖拉拉的毛病总是很难改啊. 项目是基于 cocos2d-x v2.2 版本 ,目前只编译到了 Win8 平台上,并且已经上传到了商店,支持 ...

  8. Chrome 中的彩蛋,一款小游戏,你知道吗?

    今天看到一篇文章,介绍chrome中的彩蛋,带着好奇心进去看了一眼,没想到发现了一款小游戏,个人觉得还不错,偶尔可以玩一下,放松放松心情!^_^ 当 Chrome 无法连接到互联网时, 或者上着网突然 ...

  9. 软件工程:黄金G点小游戏1.0

    我们要做的是黄金G点小游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或100),交给裁判,裁判算出所有数字的平均值,然后乘以0.618(所谓黄金分割常数),得到G值. ...

随机推荐

  1. 0160 十分钟看懂时序数据库(I)-存储

    摘要:2017年时序数据库忽然火了起来.开年2月Facebook开源了beringei时序数据库:到了4月基于PostgreSQL打造的时序数据库TimeScaleDB也开源了,而早在2016年7月, ...

  2. vs professional 2019 离线安装包下载方法

    run->cmd D:\vsprofessional2019>vs_professional__1254024763..exe --layout D:\vsprofessional2019 ...

  3. Autofac三种生命周期

    InstancePerLifetimeScope:同一个Lifetime生成的对象是同一个实例 SingleInstance:单例模式,每次调用,都会使用同一个实例化的对象:每次都用同一个对象: In ...

  4. Intellij IDEA 快捷键大全【转】

    IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文 ...

  5. gin框架封装自己的路由 ②

    在一个项目中,我们会有很多路由,那么我们该如何更好的管理自己的路由,在多人协同的情况下可以更好的规范路由呢,我来说一下自己的做法 1.承接gin框架初识(先跑一个简单demo) ①,先创建一个cont ...

  6. wepy全局拦截器

    wepy有支持全局拦截器,但是请求需要使用wepy.request().then(): 在app.wpy文件中配置以下内容,与data同级 constructor(){ super(); this.u ...

  7. 解决window 12 service 不能调用excel ,报"System.Runtime.InteropServices.COMException (0x800A03EC)

    Step1: 运行comexp.msc -32 注意因为excel 是32 位的,所以这里用的32位的操作, 如用64位的操作命令:dcomcnfg.exe,将找不到excel com 进入compo ...

  8. 【转载】salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable

    salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable   本篇知识参考:https://developer.salesforce.com/trailhead/for ...

  9. 二〇一八-网易秋招面试解析(Java)

    一轮面试: Java内存模型讲一下 GC算法,知道的都讲一下 HashMap,get,put实现 JsonWebToken具体实现流程(简历) Spring AOP如何实现,写一个AOP功能的主要流程 ...

  10. Sharing is only supported for boot loader classes because bootstrap classpath has been appended

    在idea里面运行项目,terminal里面报“Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boo ...