先正向从1点出发SPFA,获得min[i],就是到达i点能最低购买到的价格,(起始点到i的路上经过的最小值)

然后反向(将图反向),从n点开始SPFA,获得max[i],就是从i点到终点能够卖出的最大的价格,(终止点到i的路上经过的最大值)

然后就是寻找差价最大的i,输出答案即可。

代码:

#include<iostream>
#include<cstring>
#include<queue>
#define MAXM 500005
#define MAXN 100005
#define INF 0x3f3f3f3f
using namespace std; int n,m;
struct edge{
int to,next;
}eg1[MAXM],eg2[MAXM];
int head1[MAXN],head2[MAXN];
int cnt1=,cnt2=;
int num[MAXN];
int Max[MAXN]; int Min[MAXN];
bool vis[MAXN];
int ans=;
queue<int> q; void add1(int a,int b){
cnt1++;
eg1[cnt1].to=b;
eg1[cnt1].next=head1[a];
head1[a]=cnt1;
}
void add2(int a,int b){
cnt2++;
eg2[cnt2].to=b;
eg2[cnt2].next=head2[a];
head2[a]=cnt2;
} int main(){
freopen("1.in","r",stdin);
memset(head1,-,sizeof(head1));
memset(head2,-,sizeof(head2)); cin>>n>>m;
for(int i=;i<=n;i++)cin>>num[i];
int a,b,c;
for(int i=;i<=m;i++){
cin>>a>>b>>c;
if(c==){
add1(b,a); add2(a,b);
}
add1(a,b); add2(b,a);
} //spfa1
memset(Min,0x3f,sizeof(Min));
memset(vis,false,sizeof(vis));
q.push(); vis[]=true; Min[]=num[];
while(!q.empty()){
int k=q.front(); q.pop();
vis[k]=false;
for(int i=head1[k];i!=-;i=eg1[i].next){
int u=eg1[i].to;
if(Min[u]>Min[k]){
Min[u]=Min[k];
if(!vis[u]){
q.push(u);
vis[u]=true;
}
}
if(Min[u]>num[u]){
Min[u]=num[u];
if(!vis[u]){
q.push(u);
vis[u]=true;
}
}
}
} //spfa2
memset(Max,0xf3,sizeof(Max));
memset(vis,false,sizeof(vis));
q.push(n); vis[n]=true; Max[n]=num[n];
while(!q.empty()){
int k=q.front(); q.pop();
vis[k]=false;
for(int i=head2[k];i!=-;i=eg2[i].next){
int u=eg2[i].to;
if(Max[u]<Max[k]){
Max[u]=Max[k];
if(!vis[u]){
q.push(u);
vis[u]=true;
}
}
if(Max[u]<num[u]){
Max[u]=num[u];
if(!vis[u]){
q.push(u);
vis[u]=true;
}
}
}
} ans=;
for(int i=;i<=n;i++){
//cout<<Min[i]<<' '<<Max[i]<<endl;
if(ans<Max[i]-Min[i]){
ans=Max[i]-Min[i];
}
}
cout<<ans<<endl; return ;
}

一开始疑问没有权值spfa怎么做...学习了!

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

  1. NOIP2009 最优贸易

    3. 最优贸易 (trade.pas/c/cpp) [问题描述] C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间 多只有一条道路直接相连.这 m 条道 ...

  2. Codevs 1173 最优贸易 2009年NOIP全国联赛提高组

    1173 最优贸易 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description [问题描述] C 国有n ...

  3. Luogu P1073 最优贸易

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

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

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

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

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

  6. [Luogu 1073] NOIP2009 最优贸易

    [Luogu 1073] NOIP2009 最优贸易 分层图,跑最长路. 真不是我恋旧,是我写的 Dijkstra 求不出正确的最长路,我才铤而走险写 SPFA 的- #include <alg ...

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

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

  8. 【洛谷P1073】[NOIP2009]最优贸易

    最优贸易 题目链接 看题解后感觉分层图好像非常NB巧妙 建三层n个点的图,每层图对应的边相连,权值为0 即从一个城市到另一个城市,不进行交易的收益为0 第一层的点连向第二层对应的点的边权为-w[i], ...

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

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

随机推荐

  1. Netty--使用TCP协议传输文件

    简介: 用于将文件通过TCP协议传输到另一台机器,两台机器需要通过网络互联. 实现: 使用Netty进行文件传输,服务端读取文件并将文件拆分为多个数据块发送,接收端接收数据块,并按顺序将数据写入文件. ...

  2. Java运算符 逻辑运算符 短路运算符

    &      与 两个运算数都为真时结果为真,只要有一个运算数为假结果就为假,否则就为真. true & true = true   true & false = false ...

  3. Eclipse中设置JDK、${user}变量

    为eclipse设置jdk方法: 两个方法: 1.设置PATH路径-eclipse自动会查找! 2.在快捷方式中加上参数:-VM java虚拟机路径 Eclipse中设置${user}变量 在Ecli ...

  4. MySQL skills

    复制 sysbench 监控 调优

  5. 第四章 Kubernetes 架构

    4.1 Master节点:Master是大脑,运行如下Daemon服务: API Server(kube-apiserver)      API server提供了HTTP/HTTPS RESTful ...

  6. Python Twisted系列教程19:改变之前的想法

    作者:dave@http://krondo.com/i-thought-i-wanted-it-but-i-changed-my-mind/  译者: Cheng Luo 你可以从”第一部分 Twis ...

  7. bat执行sqlplus语句,省去@xx.sql过程

    bat文件中执行写sqlplus连接,再@调用自己,sql登录成功后,会忽略掉第一行sqlplus xxx,转而执行下方的sql语句 --------------------------------- ...

  8. Flask之模板之控制语句

    3.4 控制语句 常用的几种控制语句: 模板中的if控制语句 @app.route('/user') def user(): user = 'dongGe' return render_templat ...

  9. ArcGIS 二次开发增加工具栏按钮时,给按钮图标设置失败

    在类的构造函数中通过下面的代码获得的bitmap为null: string bitmapResourceName = GetType().Name + ".bmp"; base.m ...

  10. how to use jquery with primefaces

    PrimeFaces already ships with jQuery bundled, yet you've downloaded and installed another one which ...