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∗105,1<=Ri,Sigma(Ri)<=106,1<=Ki,Si<=5∗10142<=N<=2*10^5 , 1<=Ri,Sigma(Ri)<=10^6, 1<=Ki,Si<=5*10^142<=N<=2∗105,1<=Ri,Sigma(Ri)<=106,1<=Ki,Si<=5∗1014

思路

我们设f[i]f[i]f[i]为杀死第iii个怪物的花费,不难发现有f[i]=min(k[i],∑j∈R[i]f[j])f[i] = min(k[i],\sum_{j \in R[i]}^{} f[j])f[i]=min(k[i],∑j∈R[i]​f[j]),对于一个DAGDAGDAG,我们可以拓扑排序dpdpdp,但是本题中可能会有环路,于是我们发现了一个性质,更改了f[i]f[i]f[i]会对所有j∣i∈R[j]j|i \in R[j]j∣i∈R[j]造成影响,仔细一看这不就是SPFASPFASPFA吗?

#include<bits/stdc++.h>
#define int long long
#define N 200015
#define inf 0x3f3f3f3f
#define pb push_back
#define mp make_pair
#define lowbit(i) ((i)&(-i))
using namespace std;
int n,w[N],dis[N];
vector<int> son[N],fa[N];
bool vis[N];
queue<int> q;
void SPFA(){for(int i = 1;i <= n;++i) q.push(i),vis[i] = 1;while(!q.empty()){int u = q.front();q.pop();vis[u] = 0;int val = w[u];for(int i = 0;i < son[u].size();++i) val += dis[son[u][i]];if(val >= dis[u]) continue;dis[u] = val;for(int i = 0;i < fa[u].size();++i){if(!vis[fa[u][i]]){vis[fa[u][i]] = 1;q.push(fa[u][i]);}} }
}
signed main(){//freopen(".in","r",stdin);//freopen(".out","w",stdout);ios::sync_with_stdio(0);cin.tie(0);scanf("%lld",&n);for(int i = 1;i <= n;++i){int x,t;scanf("%lld%lld%lld",&w[i],&dis[i],&x);while(x-->0){scanf("%lld",&t);son[i].pb(t);fa[t].pb(i);} }SPFA();printf("%lld",dis[1]);return 0;
}

[Ahoi2014Jsoi2014]骑士游戏(SPFA)相关推荐

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

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

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

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

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

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

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

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

  5. bzoj 3875: [Ahoi2014Jsoi2014]骑士游戏【dp+spfa】

    设f[i]为杀死i的最小代价,显然\( f[i]=min(k[i],s[i]+\sum f[to]) \) 但是这个东西有后效性,所以我们使用spfa来做,具体就是每更新一个f[i],就把能被它更新的 ...

  6. 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​代价直接消灭它,现在 ...

  7. bzoj3875 [Ahoi2014Jsoi2014]骑士游戏

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

  8. 【bzoj3875】[Ahoi2014Jsoi2014]骑士游戏

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

  9. 【BZOJ3875】【Ahoi2014】骑士游戏 SPFA处理有后效性动规

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

最新文章

  1. 2022-2028年中国铁路机车行业投资分析及前景预测报告
  2. oracle冷备份 代码,Oracle冷备份和恢复自动产生sql源代码
  3. Windows核心编程 第五章 作业(下)
  4. 升级到php7和安装拓展(mac centos)
  5. 高斯金字塔 拉普拉斯金字塔_金字塔学入门指南
  6. c# 多线程界面卡顿_C#多线程解决界面卡死问题的完美解决方案
  7. checkbox:全选、全不选、单选(慕课网题目)
  8. 良心高效,3款超级好用的PC端软件,让你找不到拒绝的理由
  9. python获取现在的日期和时间
  10. win7的ie10浏览器打不开,就是双击图标无反应
  11. 技术使用总结-旷视人脸识别-(APP中H5接入)
  12. OpenJDK源码赏析之三:Java命令参数的读取处理流程
  13. 网页访问localhost出现用户名和密码登录弹窗
  14. ni max不能连续采集图像_图像识别技术在智慧教室录播系统中的应用研究
  15. 好用的平板触控笔,apple pencil的平替笔推荐
  16. CentOS7.6安装图形界面失败,startx执行失败
  17. 2020年3月22日总结
  18. 安卓手机合并内存卡到内置存储
  19. android 進度條_Android ProgressBar 反向進度條/進度條從右到左走
  20. 《统计学习方法》读书笔记第1章: 统计学习及监督学习概论

热门文章

  1. 北京将评估特定时段特定区域机动车单双号限行-单双号-限行
  2. web期末大作业-前端网页--H5--海贼王动态网页源码-海贼王网页
  3. php使用百度地图,调用百度地图
  4. clamav的病毒库文件的文件头的信息说明(clamav版本号等)
  5. 新华社 | 郭为:IT构架创新助力中国金融科技创新之路
  6. [转载]软件常见的各种版本英文缩写
  7. selenium源码通读·5 |webdriver/common/action_chains.py-ActionChains类分析
  8. slb健康检查方式_负载均衡(SLB)
  9. apt apt-get_Windows用户准备好进行apt-get吗?
  10. Intel芯片组大全最新版