#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
int head1[maxn], head2[maxn], maxx[maxn], minn[maxn];
bool in1[maxn], in2[maxn];
int value[maxn];
int N, m, s;
struct edge
{
int to, next;
}es1[maxn], es2[maxn];
queue<int> q;
int num1 = 0, num2 = 0;
void link(int x, int y) {
num1++;
es1[num1].to = y;
es1[num1].next = head1[x];
head1[x] = num1;
num2++;
es2[num2].to = x;
es2[num2].next = head2[x];
head2[y] = num2;
}
void spfa1() {
memset(minn, 127, sizeof(minn));
minn[s] = value[s];
in1[s] = 1;
q.push(s);
while(!q.empty()) {
int x = q.front();
q.pop();
in1[x] =false;
for(int i = head1[x]; i != -1; i = es1[i].next) {
int n = es1[i].to;
if(minn[n] > minn[x] || value[n] < minn[n]) {
minn[n] = min(minn[x], value[n]);
if(in1[n] == 0) {
q.push(n);
in1[n] = true;
}
}
}
}
}
void spfa2() {
memset(maxx, -1, sizeof(maxx));
maxx[N] = value[N];
in2[N] = 1;
q.push(N);
while(!q.empty()) {
int x = q.front();
q.pop();
in2[x] =false;
for(int i = head2[x]; i != -1; i = es2[i].next) {
int n = es2[i].to;
if(maxx[n] < maxx[x] || value[n] > maxx[n]) {
maxx[n] = max(maxx[x], value[n]);
if(in2[n] == 0) {
q.push(n);
in2[n] = true;
}
}
}
}
}
int main() {
// freopen("input.in", "r", stdin);
memset(head1, -1, sizeof(head1));
memset(head2, -1, sizeof(head2));
memset(in1, 0, sizeof(in1));memset(in2, 0, sizeof(in2));
cin >> N >> m;
s = 1;
for(int i = 1; i <= N; i++) cin >> value[i];
for(int i = 1; i <= m; i++) {
int x, y, z;
cin >> x >> y >> z;
link(x, y);
if(z == 2) link(y, x);
}
spfa1();
spfa2();
int ans = 0;
for(int i = 1; i <= N; i++) {
ans = max(maxx[i]-minn[i], ans);
}
cout << ans;
}

明白了一个道理:spfa不仅仅能求最短路啊!

以后要记住,如果要求求一条路上的某个值,可以考虑用spfa

P1073 最优贸易的更多相关文章

  1. 洛谷 P1073 最优贸易 解题报告

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

  2. 洛谷P1073 最优贸易==codevs1173 最优贸易

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

  3. 洛谷——P1073 最优贸易

    P1073 最优贸易 n 个城市间以 m 条有向道路连接, 小 T 从 1 号城市出发, 将要去往 n 号城市.小 T 观察到一款商品 Z 在不同的城市的价格可能不尽相同,小 T 想要在旅行中的某一个 ...

  4. P1073 最优贸易 建立分层图 + spfa

    P1073 最优贸易:https://www.luogu.org/problemnew/show/P1073 题意: 有n个城市,每个城市对A商品有不同的定价,问从1号城市走到n号城市可以最多赚多少差 ...

  5. Luogu P1073 最优贸易(最短路)

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

  6. 洛谷 P1073 最优贸易 最短路+SPFA算法

    目录 题面 题目链接 题目描述 输入输出格式 输入格式 输出格式 输入输出样例 输入样例 输出样例 说明 思路 AC代码 题面 题目链接 P1073 最优贸易 题目描述 C国有 $ n $ 个大城市和 ...

  7. P1073 最优贸易 分层图+最长路

    洛谷p1073 最优贸易 链接 首先易得暴n2的暴力,暴力枚举就行 显然1e5的数据是会炸的 我们再分析题意,发现一共分为两个个步骤,也可以说是状态,即在一个点买入,在另一个点卖出,我们可以构建一个三 ...

  8. 洛谷P1073 最优贸易 [图论,DP]

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

  9. Luogu P1073 最优贸易

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

  10. [NOIP2009] 提高组 洛谷P1073 最优贸易

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

随机推荐

  1. HTML DOM domain 属性

    定义和用法 domain 属性可返回下载当前文档的服务器域名. 语法 document.domain 说明 该属性是一个只读的字符串,包含了载入当前文档的 web 服务器的主机名. 提示和注释 提示: ...

  2. Enum(枚举类型)的基本应用

    一.前言 在我们日常的开发过程中,我们经常定义使用常量:在Effective Java建议用枚举来替换常量的使用,提高我们代码的质量,总结一下枚举定义常量的基本使用 二.枚举类型说明      1.枚 ...

  3. 基于Theano的DL的开源小框架:Dragon

    Link:https://github.com/neopenx/Dragon 起因 最近看了Hinton的Dropout,发现原来的乱代码只能在Softmax层前面加Dropout.索性把整个Thea ...

  4. HDU 2836 (离散化DP+区间优化)

    Reference:http://www.cnblogs.com/wuyiqi/archive/2012/03/28/2420916.html 题目链接: http://acm.hdu.edu.cn/ ...

  5. POJ 3276 (开关问题)

    题目链接: http://poj.org/problem?id=3276 题目大意:有一些牛,头要么朝前要么朝后,现在要求确定一个连续反转牛头的区间K,使得所有牛都朝前,且反转次数m尽可能小. 解题思 ...

  6. win7 删除Windows服务的方法

    http://www.jb51.net/os/windows/25090.html 一.什么是Windows服务 Windows服务也称为Windows Service,它是Windows操作系统和W ...

  7. Coder-Strike 2014 - Round 1 C. Pattern

    题目的意思是给出n个长度相同的字符串然后找出与他们匹配的字符串 将字符串存入类似二维数组的里面,每一行代表一个字符串,遍历每列,判断每列是否有公共的匹配字符,如果有输出任意一个 如果没有输出'?' # ...

  8. ACM 兰州烧饼

    兰州烧饼 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 烧饼有两面,要做好一个兰州烧饼,要两面都弄热.当然,一次只能弄一个的话,效率就太低了.有这么一个大平底锅,一 ...

  9. Xcode UIView 中的Button 控件的属性和基本用法

      //第一种创建UIButton的方法 //initWhitFrame: UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(1 ...

  10. NOIP欢乐模拟赛 T2 解题报告

    小澳的坐标系 (coordinate.cpp/c/pas) [题目描述] 小澳者表也,数学者景也,表动则景随矣. 小澳不喜欢数学,可数学却待小澳如初恋,小澳睡觉的时候也不放过. 小澳的梦境中出现了一个 ...