bzoj 3875 骑士游戏 - spfa - 动态规划
Description
Input
Output
输出一行一个整数,表示最少需要的体力值。
Sample Input
4 27 3 2 3 2
3 5 1 2
1 13 2 4 2
5 6 1 2
Sample Output
HINT
Source
题目大意
一共有$n$种怪兽,第$i$种怪兽遭到普通攻击后会分裂成若干个小怪兽,会被法术攻击彻底消灭。对于每种怪兽使用法术攻击和普通攻击消耗的体力值是不同的。
现在,1只种类为1的怪兽入侵村庄,问彻底消灭村庄内的怪兽至少需要的体力值。
依稀记得以前有过spfa套dp的脑洞,但没想到真有人出这么一道题
显然可以看见动态规划的影子,以及显而易见的方程:
$f[i] = \max \left(k_{i}, s_{i} + \sum_{j}f[j] \right ) $
真棒,转移有环。那么可以解方程吗?至少我不会,这里可要做决策。
那看看最短路的动态规划的方程
$f[i] = \min\left \{ f[j] + w\left(j, i \right ) \right \}$
显然它也是有环的。但是spfa通过反复进行更新来得到最优解,即当一个状态被更新后,就把它放入队列去更新它的后继状态。
这道题也可以采用同样的做法。
Code
/**
* bzoj
* Problem#3875
* Accepted
* Time: 5496ms
* Memory: 22764k
*/
#include <bits/stdc++.h>
#ifndef WIN32
#define Auto "%lld"
#else
#define Auto "%I64d"
#endif
using namespace std;
typedef bool boolean;
#define ll long long int n;
ll *ss;
vector<int> *suf;
vector<int> *pre;
ll* f;
queue<int> que; inline void init() {
scanf("%d", &n);
f = new ll[(n + )];
ss = new ll[(n + )];
suf = new vector<int>[(n + )];
pre = new vector<int>[(n + )];
for (int i = , u, x; i <= n; i++) {
scanf(Auto""Auto"%d", ss + i, f + i, &u);
while (u--) {
scanf("%d", &x);
suf[i].push_back(x);
pre[x].push_back(i);
}
}
} boolean *vis;
void spfa() {
vis = new boolean[(n + )];
memset(vis, true, sizeof(boolean) * (n + ));
for (int i = ; i <= n; i++)
que.push(i);
while (!que.empty()) {
int e = que.front();
ll cmp = ss[e];
que.pop();
vis[e] = false;
for (int i = ; i < (signed) suf[e].size(); i++)
cmp += f[suf[e][i]];
if (cmp < f[e]) {
f[e] = cmp;
for (int i = ; i < (signed) pre[e].size(); i++) {
int eu = pre[e][i];
if (!vis[eu]) {
que.push(eu);
vis[eu] = true;
}
}
}
}
} inline void solve() {
spfa();
printf(Auto"\n", f[]);
} int main() {
init();
solve();
return ;
}
bzoj 3875 骑士游戏 - spfa - 动态规划的更多相关文章
- BZOJ 3875: [Ahoi2014]骑士游戏 spfa dp
3875: [Ahoi2014]骑士游戏 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3875 Description [故事背景] 长 ...
- 【BZOJ3875】【AHOI2014】骑士游戏 [Spfa][DP]
骑士游戏 Time Limit: 30 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 在这个游戏中,JYY一共有两种攻击 ...
- 【BZOJ3875】[Ahoi2014&Jsoi2014]骑士游戏 SPFA优化DP
[BZOJ3875][Ahoi2014&Jsoi2014]骑士游戏 Description [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会扮演一个英勇的 ...
- bzoj3875 【Ahoi2014】骑士游戏 spfa处理后效性动规
骑士游戏 [故事背景] 长期的宅男生活中,JYY又挖掘出了一款RPG游戏.在这个游戏中JYY会 扮演一个英勇的骑士,用他手中的长剑去杀死入侵村庄的怪兽. [问题描述] 在这个游戏中,JYY一共有两种攻 ...
- BZOJ3875 AHOI2014/JSOI2014骑士游戏(动态规划)
容易想到设f[i]为杀死i号怪物所消耗的最小体力值,由后继节点更新.然而这显然是有后效性的,正常的dp没法做. 虽然spfa已经死了,但确实还是挺有意思的.只需要用spfa来更新dp值就可以了.dij ...
- LUOGU P4042 [AHOI2014/JSOI2014]骑士游戏 (spfa+dp)
传送门 解题思路 首先设\(f[x]\)表示消灭\(x\)的最小花费,那么转移方程就是 \(f[x]=min(f[x],\sum f[son[x]] +s[x])\),如果这个转移是一个有向无环图,那 ...
- BZOJ 3875: [Ahoi2014]骑士游戏 dp+spfa
题目链接: 题目 3875: [Ahoi2014]骑士游戏 Time Limit: 30 Sec Memory Limit: 256 MB 问题描述 [故事背景] 长期的宅男生活中,JYY又挖掘出了一 ...
- BZOJ 3875: [Ahoi2014]骑士游戏
d[i]表示消灭i所需的最小体力值, d[i] = min(S[i], K[i]+Σd[x]), Σd[x]表示普通攻击而产生的其他怪兽. 因为不是DAG, 所以用个队列类似SPFA来更新答案. -- ...
- [bzoj3875] [Ahoi2014]骑士游戏
3875: [Ahoi2014]骑士游戏 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 844 Solved: 440[Submit][Status ...
随机推荐
- idc指令相关
#按不同数据类型打印当前地址opcode print Byte(ea) print Word(ea) print Dword(ea)
- [ Deep Learning ] Keras & TensorFlow安装依赖包
OS:Mac Python:3.6 一.先安装Keras,再安装TensorFlow 1. 安装Keras Package Version---------- -------h5py 2.7.1 Ke ...
- Mysql版本java问题(com.mysql.cj.jdbc.Driver和com.mysql.jdbc.Driver)
老版本com.mysql.jdbc.Driver已弃用 String url1 = "jabc:mysql://127.0.0.1:3306/test"; String url1 ...
- 仿豆瓣网(电脑版网页)HTML+CSS实现
步骤一:将豆瓣电脑版网页以图片形式保存下来: 利用了chrome里面的插件: 步骤二:将图片放置到PS中,研究布局: 我将其分为header部分,banner部分,section部分,footer部分 ...
- sitecore系统教程之部署架构方式分析
当您第一次部署Sitecore体验平台时,您可以选择三种主要体系结构选项: 内部部署服务器解决方案 混合服务器方案 云服务器解决方案 您是选择将Sitecore作为云,内部部署还是混合解决方案运行,取 ...
- sitecore系统教程之媒体库
您可以管理媒体库中的所有媒体项目,例如要嵌入网页的图像或供访问者下载的图像.媒体库包含所有媒体项目,例如图像,文档,视频和音频文件. 在媒体库中,您可以: 将所有媒体文件保存在一个位置,并将其组织在与 ...
- 【转】推荐4个不错的Python自动化测试框架
之前,开发团队接手一个项目并开始开发时,除了项目模块的实际开发之外,他们不得不为这个项目构建一个自动化测试框架.一个测试框架应该具有最佳的测试用例.假设(assumptions).脚本和技术来运行每一 ...
- scss简单用法
- 一起学习在 Ubuntu 上授予和移除 sudo 权限
如你所知,用户可以在 Ubuntu 系统上使用 sudo 权限执行任何管理任务.在 Linux 机器上创建新用户时,他们无法执行任何管理任务,直到你将其加入 sudo 组的成员.在这个简短的教程中,我 ...
- scala语言中的case关键字在spark中的一个奇特使用
package com.spark.demo import com.spark.demo.util.SparkUtil import org.apache.spark.rdd.RDD import s ...