【bzoj3875】[Ahoi2014Jsoi2014]骑士游戏
Description
【故事背景】
长期的宅男生活中,JYY又挖掘出了一款RPG游戏。在这个游戏中JYY会
扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽。
【问题描述】
在这个游戏中,JYY一共有两种攻击方式,一种是普通攻击,一种是法术攻
击。两种攻击方式都会消耗JYY一些体力。采用普通攻击进攻怪兽并不能把怪兽彻底杀死,怪兽的尸体可以变出其他一些新的怪兽,注意一个怪兽可能经过若干次普通攻击后变回一个或更多同样的怪兽;而采用法术攻击则可以彻底将一个怪兽杀死。当然了,一般来说,相比普通攻击,法术攻击会消耗更多的体力值(但由于游戏系统bug,并不保证这一点)。
游戏世界中一共有N种不同的怪兽,分别由1到N编号,现在1号怪兽入
侵村庄了,JYY想知道,最少花费多少体力值才能将所有村庄中的怪兽全部杀死呢?
Input
第一行包含一个整数N。
接下来N行,每行描述一个怪兽的信息;
其中第i行包含若干个整数,前三个整数为Si,Ki和Ri,表示对于i号怪兽,
普通攻击需要消耗Si的体力,法术攻击需要消耗Ki的体力,同时i号怪兽死亡后会产生Ri个新的怪兽。表示一个新出现的怪兽编号。同一编号的怪兽可以出现多个。
Output
输出一行一个整数,表示最少需要的体力值。
Sample Input
4
4 27 3 2 3 2
3 5 1 2
1 13 2 4 2
5 6 1 2
Sample Output
26
HINT
【样例说明】
首先用消耗4点体力用普通攻击,然后出现的怪兽编号是2,2和3。花费
10点体力用法术攻击杀死两个编号为2的怪兽。剩下3号怪兽花费1点体力进
行普通攻击。此时村庄里的怪兽编号是2和4。最后花费11点体力用法术攻击
将这两只怪兽彻底杀死。一共花费的体力是4+5+5+1+5+6=26。
【数据范围】
2<=N<=2*10^5,1<=Ri,Sigma(Ri)<=10^6,1<=Ki,Si<=5*10^14
题解
记f[i]为杀死i的最小代价,当f[i]被跟新时,可以变出f[i]的点可能也被更新,类似SPFA跟新即可
代码
#include<bits/stdc++.h>
#define mod 1000000007
#define inf 1000000000
#define N 200005
typedef long long ll;
using namespace std;
inline int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-')f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
queue<int>q;
vector<int>PRE[N];
vector<int>TO[N];
bool inq[N];
int n;
ll f[N],s[N];
int main()
{n=read();for (int i=1;i<=n;i++){scanf("%lld%lld",&s[i],&f[i]);int r=read();q.push(i);inq[i]=1;while (r--){int x=read();TO[i].push_back(x);PRE[x].push_back(i);}}while (!q.empty()){int now=q.front();q.pop();ll cost=s[now];for (int i=0;i<TO[now].size();i++)cost+=f[TO[now][i]];if (f[now]>cost){f[now]=cost;for (int i=0;i<PRE[now].size();i++)if (!inq[PRE[now][i]]){inq[PRE[now][i]]=1;q.push(PRE[now][i]);}}inq[now]=0;}cout<<f[1];return 0;
}
【bzoj3875】[Ahoi2014Jsoi2014]骑士游戏相关推荐
- bzoj3875: [Ahoi2014Jsoi2014]骑士游戏 spfa处理有后效性动规
bzoj3875: [Ahoi2014&Jsoi2014]骑士游戏 Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的 ...
- bzoj3875 [Ahoi2014Jsoi2014]骑士游戏
Description 长期的宅男生活中, JYYJYY 又挖掘出了一款 RPGRPG 游戏.在这个游戏中 JYYJYY 会扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. 在这个游戏中, J ...
- bzoj3875: [Ahoi2014Jsoi2014]骑士游戏(spfa+dp)
传送门 题意简述: n n n个怪物,对于编号为 i i i的怪物可以选择用 a i a_i ai代价将其分裂成另外的 b i b_i bi个怪物或者用 c i c_i ci代价直接消灭它,现在 ...
- 【BZOJ3875】[Ahoi2014Jsoi2014]骑士游戏 SPFA优化DP
[BZOJ3875][Ahoi2014&Jsoi2014]骑士游戏 Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会扮演一个英勇的骑 ...
- BZOJ 3875: [Ahoi2014Jsoi2014]骑士游戏 dp spfa
3875: [Ahoi2014&Jsoi2014]骑士游戏 Time Limit: 30 Sec Memory Limit: 256 MB Submit: 933 Solved: 475 ...
- [Ahoi2014Jsoi2014]骑士游戏(SPFA)
Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. [问题描述] 在这个游戏中,JY ...
- BZOJ3875: [Ahoi2014]骑士游戏
Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. [问题描述] 在这个游戏中,JY ...
- Bzoj3875 [Ahoi2014]骑士游戏
Time Limit: 30 Sec Memory Limit: 256 MB Submit: 749 Solved: 392 Description [故事背景] 长期的宅男生活中,JYY又挖掘 ...
- bzoj 3875: [Ahoi2014Jsoi2014]骑士游戏【dp+spfa】
设f[i]为杀死i的最小代价,显然\( f[i]=min(k[i],s[i]+\sum f[to]) \) 但是这个东西有后效性,所以我们使用spfa来做,具体就是每更新一个f[i],就把能被它更新的 ...
最新文章
- 强化学习、联邦学习、图神经网络,飞桨全新工具组件详解
- php 多线程上传,PHP多线程(pthreads)参数传递学习笔记
- Building Java Projects with Gradle
- jvm性能调优实战 - 61常用的JVM调优网站
- linux中shell变量$#,$@,$0,$1,$2的含义解释(转)
- 升级openssh漏洞
- 启动虚拟机连接教程,连接教学,一级初级开发虚拟机中的简单指令
- 主题:基于非合作博弈模型多微网交易策略研究 参考文档:《基于博弈论的多微电网系统交易模式研究》完全复现
- 如何找回iPhone的访问限制密码
- 分布式协调服务——Zookeeper入门
- 读美妆论文AN AUTOMATIC FRAMEWORK FOR EXAMPLE-BASED VIRTUAL MAKEUP
- python—最大公约数和最小公倍数
- ubuntu和Windows双系统开机直接进入Windows,双系统添加Ubuntu引导
- 2020年面试后端必会算法记录
- 第12期《在速度与激情中奔跑》4月刊
- 老铁们,Arxiv每日论文服务美美上线啦
- win系统如何开启Administrator超级管理员帐户
- 数据异质性会影响深度学习变化检测模型的迁移能力,请列出提升模型迁移性的解决思路...
- 为什么索引会加快查询速度?索引原理和使用原则
- Python的内建数据结构总结