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]=min(k[i],sigma(f[j])+s[i]),j表示i生成的怪兽
转移比较麻烦,换种思想
可以发现这是一个带环的图,那么最后肯定是要用一发法术攻击结尾的。
那么spfa优化

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
using namespace std;
typedef long long LL;
queue<int> Q;
vector<int>P[210000];
struct node
{int x,y,next;
}a[1110000];int len,last[210000];
void ins(int x,int y)
{len++;a[len].x=x;a[len].y=y;a[len].next=last[x];last[x]=len;
}
int n;
LL f[210000];//杀死怪兽
LL ss[210000],kk[210000],rr[210000];
bool v[210000];
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld%lld%lld",&ss[i],&kk[i],&rr[i]);f[i]=kk[i];Q.push(i);for(int j=1;j<=rr[i];j++){LL x;scanf("%lld",&x);P[i].push_back(x);ins(x,i);}}memset(v,true,sizeof(v));while(!Q.empty()){int x=Q.front();LL d=ss[x];for(int i=0;i<P[x].size();i++)d+=f[P[x][i]];if(d<f[x]){f[x]=d;for(int k=last[x];k;k=a[k].next){int y=a[k].y;if(v[y]==false){v[y]=true;Q.push(y);}}}Q.pop();v[x]=false;}printf("%lld\n",f[1]);return 0;
}

[bzoj3875][DP][最短路]骑士游戏相关推荐

  1. bzoj3875 【Ahoi2014】骑士游戏 spfa处理后效性动规

    骑士游戏 [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. [问题描述] 在这个游戏中,JYY一共有两种攻 ...

  2. 【BZOJ3875】[Ahoi2014Jsoi2014]骑士游戏 SPFA优化DP

    [BZOJ3875][Ahoi2014&Jsoi2014]骑士游戏 Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会扮演一个英勇的骑 ...

  3. bzoj3875: [Ahoi2014Jsoi2014]骑士游戏 spfa处理有后效性动规

    bzoj3875: [Ahoi2014&Jsoi2014]骑士游戏 Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的 ...

  4. BZOJ 3875: [Ahoi2014Jsoi2014]骑士游戏 dp spfa

    3875: [Ahoi2014&Jsoi2014]骑士游戏 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 933  Solved: 475 ...

  5. BZOJ 3875 Ahoi2014 骑士游戏

    3875: [Ahoi2014]骑士游戏 Time Limit: 30 Sec  Memory Limit: 256 MB Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款 ...

  6. 3875: [Ahoi2014]骑士游戏

    3875: [Ahoi2014]骑士游戏 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 599  Solved: 319 [Submit][Stat ...

  7. 新千题计划 2#:[AHOI JSOI14] 骑士游戏

    骑士游戏[难度:NOIP D2T1]有 nn<script type="math/tex" id="MathJax-Element-3">n< ...

  8. 题解 洛谷 P4042 [AHOI2014/JSOI2014]骑士游戏

    洛谷P4042[AHOI2014/JSOI2014]骑士游戏\color{#00F}{洛谷\ P4042\ [AHOI2014/JSOI2014]骑士游戏}洛谷 P4042 [AHOI2014/JSO ...

  9. 【ECNU OJ 3373】 骑士游戏 最短路径+动态规划

    Problem 3373 骑士游戏 长期的宅男生活中,JYY 又挖掘出了一款 RPG 游戏.在这个游戏中 JYY 会扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. 在这个游戏中,JYY 一共 ...

最新文章

  1. Spring-AOP @AspectJ进阶之绑定代理对象
  2. 在线教育音视频技术探索与应用
  3. Drools DMN最新开源引擎性能改进
  4. 利用Arena Allocation避免HBase触发Full GC
  5. 容斥原理模板(二进制表示)
  6. Emacs学习笔记(8): 使用emacs浏览网页
  7. air文件打包成exe
  8. 一起学英语 | 用JavaScript实现数字阶乘的三种方法
  9. rss订阅_RSS订阅
  10. android在wifi和4G网络都可以使用的情况下,设置每次请求使用的网络类型
  11. 马云、奥巴马都上当:“女版乔布斯”600亿惊天骗局,电影都不敢这么拍
  12. “金三银四” 是找工作的最佳时期吗?
  13. 用键盘输入一位整数,当输入1~7时,显示对应的英文星期名称的缩写。
  14. python画布删除图形_Matplotlib在savefig之后从画布中清除旧图形
  15. Python int函数
  16. 谷歌正式推出 “密钥登录”,逐步取代传统密码登录
  17. 门级仿真经验(SDF反标及其工作原理)
  18. 人生效率手册:重塑升级版
  19. Java使用Itext5与html模板生成pdf并支持下载
  20. 我的Android前生今世之缘-学习经验-安卓教程(六)

热门文章

  1. MacW资讯:开启Mac的壁纸自动更换功能
  2. 西南大学考研计算机808真题和复试
  3. 站多久可以“抵消”久坐伤害?世卫组织推荐这个时间!
  4. 深夜十点,400万人在微博泪崩:如果人生太难,就去医院看看
  5. 百度云主机连接FTP
  6. 做一个官网企业网站费用大概需要多少钱?
  7. PHP中国际化地数字格式处理
  8. 社交登陆,分布式session,单点登陆,jwt
  9. ogm session_Hibernate OGM:降低进入NoSQL的障碍
  10. 全局设置下载方式为豆瓣镜像的方法