先正向从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. 搭建基于hyperledger fabric的联盟社区(二) --环境配置

    接下来讲一下在本地测试区块链网络的过程.我要部署的是2peer+1orderer架构,所以需要准备三台虚拟机,为了方便起见可以先把一台配置好,然后复制出剩余两台即可.搭建虚拟机我用的是virtualb ...

  2. 后台判断ajax请求的请求后字段

    headers设置:X-Requested-With:XMLHttpRequest    后台我就是根据这个来判断的

  3. Mysql auto_increment总结

    一.为什么InnoDB表要建议用自增列做主键 我们先了解下InnoDB引擎表的一些关键特征: InnoDB引擎表是基于B+树的索引组织表(IOT): 每个表都需要有一个聚集索引(clustered i ...

  4. Redis: temple

    ylbtech-Redis:  1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   7.返回顶部   8.返回顶部   9.返回顶部   1 ...

  5. centos 安装 Splunk

    (1).需关闭selinux: 1. vi /etc/sysconfig/selinux    SELINUX=disabled (2).开始安装mkdir  \splunk http://downl ...

  6. web 服务基础

    用户通过网站访问浏览器都发生了什么 如图,用户请求www.joker.com发生 1. 用户访问网站流程框架2. dns解析原理3. tcp/ip三次握手过程原理4. http协议原理(www服务的请 ...

  7. java之IO整理(中)

    一:打印流/*System.out.println()重定向输出*/ /*public static void main(String[] args) { System.out.println(&qu ...

  8. 数据结构和算法之:二分法demo

    package com.js.ai.modules.pointwall.testxfz; class OrdArray{ private long[] a; private int nElems; p ...

  9. pubmed检索完全攻略

    第一章 进入PubMed魔法学校--PubMed 概述 有位退休的老教授不止一次的向我感叹:"你们现在真是幸福,我们那时候要查一篇相关的文献,要到图书馆一本一本目录去检索.尤其是做一些别人不 ...

  10. [转] Mac系统终端命令行不执行命令 总出现command not found解决方法

    配置过安卓开发环境,改过bash_profile这个文件,最后不知怎么的只有cd命令能执行,我猜测可能修改bash_profile文件后没有保存 导致的     保存命令是: source .bash ...