「CH6101」最优贸易

传送门

考虑一种贪心的思想:我们要尽量买价格小的货物,并尽量高价转卖。

我们记 :

  • \(mn[i]\) 为从点 \(1\) 走到点 \(i\) 经过的价格最小的货物的价格。
  • \(mx[i]\) 为从点 \(i\) 走到点 \(n\) 经过的价格最大的货物的价格。

这两个东西可以跑两次 \(\text{SPFA}\) 求得。

那么对于任何一个点,如果它位于最优解对应的路径上,那么该最优值一定不会小于 \(mx[i] - mn[i]\)

那么我们就可以把每个点 \(i\) 的 \(mx[i] - mn[i]\) 取最大值,就一定可以取到最优答案。

参考代码:

#include <cstring>
#include <cstdio>
#include <queue>
#define rg register
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout)
using namespace std;
template < class T > inline void read(T& s) {
s = 0; int f = 0; char c = getchar();
while ('0' > c || c > '9') f |= c == '-', c = getchar();
while ('0' <= c && c <= '9') s = s * 10 + c - 48, c = getchar();
s = f ? -s : s;
} const int _ = 1e5 + 5, __ = 5e5 + 5; int tot, head1[_], head2[_], nxt[__ << 2], ver[__ << 2];
inline void Add_edge(int* head, int u, int v)
{ nxt[++tot] = head[u], head[u] = tot, ver[tot] = v; } int n, m, val[_], mn[_], mx[_], exi[_]; inline void spfa1() {
static queue < int > Q;
while (!Q.empty()) Q.pop();
memset(exi + 1, 0, sizeof (int) * n);
memset(mn + 1, 0x3f, sizeof (int) * n);
Q.push(1), mn[1] = val[1], exi[1] = 1;
while (!Q.empty()) {
int u = Q.front(); Q.pop(), exi[u] = 0;
for (rg int i = head1[u]; i; i = nxt[i]) {
int v = ver[i];
if (mn[v] > min(mn[u], val[v])) {
mn[v] = min(mn[u], val[v]);
if (!exi[v]) exi[v] = 1, Q.push(v);
}
}
}
} inline void spfa2() {
static queue < int > Q;
while (!Q.empty()) Q.pop();
memset(exi + 1, 0, sizeof (int) * n);
memset(mx + 1, 0, sizeof (int) * n);
Q.push(n), mx[n] = val[n], exi[n] = 1;
while (!Q.empty()) {
int u = Q.front(); Q.pop(), exi[u] = 0;
for (rg int i = head2[u]; i; i = nxt[i]) {
int v = ver[i];
if (mx[v] < max(mx[u], val[v])) {
mx[v] = max(mx[u], val[v]);
if (!exi[v]) exi[v] = 1, Q.push(v);
}
}
}
} int main() {
#ifndef ONLINE_JUDGE
file("cpp");
#endif
read(n), read(m);
for (rg int i = 1; i <= n; ++i) read(val[i]);
for (rg int u, v, x; m--; ) {
read(u), read(v), read(x);
Add_edge(head1, u, v), Add_edge(head2, v, u);
if (x == 2) Add_edge(head1, v, u), Add_edge(head2, u, v);
}
spfa1(), spfa2();
int ans = 0;
for (rg int i = 1; i <= n; ++i) ans = max(ans, mx[i] - mn[i]);
printf("%d\n", ans);
return 0;
}

「CH6101」最优贸易的更多相关文章

  1. 「NOIP2009」最优贸易 题解

    「NOIP2009」最优贸易 题解 题目TP门 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 ...

  2. 「NOIP2009」最优贸易

    「NOIP2009」最优贸易 「NOIP2009」最优贸易内存限制:128 MiB时间限制:1000 ms 题目描述C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意 ...

  3. #2590. 「NOIP2009」最优贸易

    C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双向通行的道 ...

  4. CH6101 最优贸易【最短路】

    6101 最优贸易 0x60「图论」例题 描述 C国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通 ...

  5. loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点

    loj#2255. 「SNOI2017」炸弹 线段树优化建图,拓扑,缩点 链接 loj 思路 用交错关系建出图来,发现可以直接缩点,拓扑统计. 完了吗,不,瓶颈在于边数太多了,线段树优化建图. 细节 ...

  6. 「2014-3-18」multi-pattern string match using aho-corasick

    我是擅(倾)长(向)把一篇文章写成杂文的.毕竟,写博客记录生活点滴,比不得发 paper,要求字斟句酌八股结构到位:风格偏杂文一点,也是没人拒稿的.这么说来,arxiv 就好比是 paper 世界的博 ...

  7. jvm系列(十):如何优化Java GC「译」

    本文由CrowHawk翻译,是Java GC调优的经典佳作. 本文翻译自Sangmin Lee发表在Cubrid上的"Become a Java GC Expert"系列文章的第三 ...

  8. 一个「学渣」从零开始的Web前端自学之路

    从 13 年专科毕业开始,一路跌跌撞撞走了很多弯路,做过餐厅服务员,进过工厂干过流水线,做过客服,干过电话销售可以说经历相当的“丰富”. 最后的机缘巧合下,走上了前端开发之路,作为一个非计算机专业且低 ...

  9. Loj #3059. 「HNOI2019」序列

    Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k ...

随机推荐

  1. Linux安装Redis服务

    下载:wget  http://download.redis.io/releases/redis-5.0.5.tar.gz 解压:tar -zxvf redis-5.0.5.tar.gz 进入redi ...

  2. 关于宽搜BFS广度优先搜索的那点事

    以前一直知道深搜是一个递归栈,广搜是队列,FIFO先进先出LILO后进后出啥的.DFS是以深度作为第一关键词,即当碰到岔道口时总是先选择其中的一条岔路前进,而不管其他岔路,直到碰到死胡同时才返回岔道口 ...

  3. Bug搬运工-CSCvm33229:Environment summary not available on COS APs

    还是关于温度的问题, Environment summary not available on COS APs CSCvm33229   Description Symptom:From WLC CL ...

  4. CentOS安装MySQL的步骤

    1.下载 Mysql yum包 http://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ 下载到本地再上传到服务器,或者使用wget 直接下载 w ...

  5. 【JavaScript基础#2】

    " 目录 #. 函数 1. 定义 2. arguments 参数 3. 全局变量与局部变量 4. 语法分析 #. 内置对象和方法 1. 自定义对象 2. 类之继承 3. Date 4. JS ...

  6. iframe onload事件触发两次

    标准参考 关于 HTML 4.01 规范中 onload 内在事件说明:http://www.w3.org/TR/html401/interact/scripts.html#adef-onload 关 ...

  7. iOS开发之通过Framework建立项目依赖

    https://www.jianshu.com/p/d146db167bf3 项目开发时经常会遇到个别模块想打包成framework的情况,传统的打包方式太繁琐,反复测试时很麻烦,不如一个项目管理来得 ...

  8. 在xwindows界面中切换KDE与GNOME

    在xwindows界面中切换KDE与GNOME 方法1: 在xwindows界面下通过菜单来切换,找到所需的菜单后执行,选择所需的桌面,重新启动xwindows即可. 方法2: 在命令提示符在xwin ...

  9. 《Web安全攻防 渗透测试实战指南》 学习笔记 (二)

    Web安全攻防 渗透测试实战指南   学习笔记 (二)   第二章  漏洞环境及实践  

  10. Spring Boot 2.x 入门前的准备-安装 Java JDK

    本章节介绍在以 window7.window10 为代表的 window 和 mac book 下安装 Java 编译和开发环境JDK 1.8,在 window 上安装 Java JDK 的步骤,本章 ...