#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. BestCoder Round #68 (div.2)

    并查集 1002 tree 题意:中文题面 分析:(官方题解)把每条边权是1的边断开,发现每个点离他最近的点个数就是他所在的连通块大小. 开一个并查集,每次读到边权是0的边就合并.最后Ansi=siz ...

  2. CF#335 Lazy Student

    Lazy Student time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  3. 串 & 容斥原理

    题意: 给出n (n<=50000) 个长度为4的字符串,问有且仅有d(1<=d<=4)处不相同的字符串有几对. SOL: 一直对着4发呆,这么小的字符串背后有什么玄学呢= =... ...

  4. 移动端:active,:hover无法很好触发动画的解决方案

    移动端:active,:hover无法很好触发动画的解决方案 1:问题环境: 用css3定义了一个动画,使用:hover伪类调用动画时在移动端不能很好的进行动画. 2:解决方案: 定义一个open类, ...

  5. 旋转轮子 UIActivityIndicatorView

    旋转轮子 *activityView = [[UIActivityIndicatorView alloc ]initWithActivityIndicatorStyle:UIActivityIndic ...

  6. Android -- ImageSwitch和Gallery 混合使用

    1. 实现效果

  7. Android --RatingBar的使用

    1.效果图

  8. windows一些快捷键

    1.Win + __ 1)Win + L 锁屏 2)Win + E 资源管理器(就是打开硬盘) 3)Win + D 回到桌面 4)Win + Tab 3D方式切换程序窗口 5)Win + R 运行命令 ...

  9. osgearth_city例子总结

    osgearth_city例子总结 转自:http://blog.csdn.net/taor1/article/details/8242480 int main(int argc, char** ar ...

  10. flume-ng配置文档简单说明

    1.配置文件现状 1.1 Flume数据接收端 IP地址:54.0.95.67 功能:接收各个端口发来的数据. 启动方式:进入目录 /usr/local/flume/*bin 在终端运行 ./rece ...