#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. oracle增量备份

    在进行数据库维护的过程中经常会遇到数据库备份的问题.先介绍一种常用的数据备份操作系统执行计划+批处理命令:在win的系统中存在 任务计划程序 选项:新建任务选中你写好的程序,设定好时间,就可以按照设定 ...

  2. hadoop 流streaming跑python程序

    先放上命令: hadoop jar /usr/hadoop-/contrib/streaming/hadoop-streaming-.jar -mapper mapper.py -file mappe ...

  3. Posterior visual bounds retrieval for the Plato framework

    Plato is a MVVM compliant 2D on-canvas graphics framework I've been designing and implementing for d ...

  4. ACM 过河问题

    过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的 ...

  5. ACM: Mr. Kitayuta's Colorful Graph-并查集-解题报

    Mr. Kitayuta's Colorful GraphTime Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I6 ...

  6. Unity5.x版本AssetBundle打包研究

    Unity5的AssetBundle打包机制和以前版本不太一样.简单的说就是,只要给你要打包的资源设置一个AssetBundleName ,Unity自身会对这些设置了名字的资源进行打包,如果一个资源 ...

  7. 使用forever管理nodejs应用

    1. forever介绍 forever是一个简单的命令式nodejs的守护进程,能够启动,停止,重启App应用.forever完全基于命令行操作,在forever进程之下,创建node的子进程,通过 ...

  8. jquery插件之拖拽

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 此插件旨在实现目前较为流行的拖拽效果,您可以根据自己的实际需求来设置被拖拽元素是否可 ...

  9. [LintCode] Nuts & Bolts Problem 螺栓螺母问题

    Given a set of n nuts of different sizes and n bolts of different sizes. There is a one-one mapping ...

  10. [zt]矩阵求导公式

    今天推导公式,发现居然有对矩阵的求导,狂汗--完全不会.不过还好网上有人总结了.吼吼,赶紧搬过来收藏备份. 基本公式:Y = A * X --> DY/DX = A'Y = X * A --&g ...