code1173 最优贸易
先正向从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 最优贸易的更多相关文章
- NOIP2009 最优贸易
3. 最优贸易 (trade.pas/c/cpp) [问题描述] C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间 多只有一条道路直接相连.这 m 条道 ...
- Codevs 1173 最优贸易 2009年NOIP全国联赛提高组
1173 最优贸易 2009年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description [问题描述] C 国有n ...
- Luogu P1073 最优贸易
题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双 ...
- 洛谷 P1073 最优贸易 解题报告
P1073 最优贸易 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这\(m\)条道路中有一部分 ...
- CH6101 最优贸易【最短路】
6101 最优贸易 0x60「图论」例题 描述 C国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通 ...
- [Luogu 1073] NOIP2009 最优贸易
[Luogu 1073] NOIP2009 最优贸易 分层图,跑最长路. 真不是我恋旧,是我写的 Dijkstra 求不出正确的最长路,我才铤而走险写 SPFA 的- #include <alg ...
- 洛谷P1073 最优贸易 [图论,DP]
题目传送门 最优贸易 题目描述 C 国有n 个大城市和m 条道路,每条道路连接这n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这m 条道路中有一部分为单向通行的道路,一部分为双向 ...
- 【洛谷P1073】[NOIP2009]最优贸易
最优贸易 题目链接 看题解后感觉分层图好像非常NB巧妙 建三层n个点的图,每层图对应的边相连,权值为0 即从一个城市到另一个城市,不进行交易的收益为0 第一层的点连向第二层对应的点的边权为-w[i], ...
- 洛谷P1073 最优贸易==codevs1173 最优贸易
P1073 最优贸易 题目描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一 ...
随机推荐
- MOSS 2013研究系列---列表的资源限制
MOSS2010 以后,对列表的条目数做了一些限制,大量的将数据存储在列表中,会降低列表的运行效能,因此,MOSS中对列表默认有了一个阀值,默认是5000条数据,当你存储的数据多余5000条的时候,用 ...
- tomcat 关闭出现 Connection refused 解决方法
1.找到tomcat占用的端口 ps -eaf|grep tomcat 2.杀掉tomcat进程 kill -p 6453 后记: 杀其他进程的时候,上面的方法不可以,用下面的就ok了 lsof - ...
- java代码---------实现布尔型的功能,是否执行下一步的关键
总结:灵活 package com.sads; import java.io.BufferedReader; import java.io.IOException; import java.io.In ...
- JVM内存占用情况深入分析
内存分布 首先,列举一下一个JVM进程主要占用内存的一些地方: Young Old metaspace java thread count * Xss other thread count * sta ...
- HDU 4970 Killing Monsters(树状数组)
Killing Monsters Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- [Java.Web] Servlet 的一些细节
本文来自 传智播客视频PPT 1. 由于客户端是通过 URL 地址访问 web 服务器中的资源,所以 Servlet 程序若想被外界访问,必须把 servlet 程序映射到一个 URL 地址上,这个工 ...
- C++ cosnt的一点总结
1,C++在定义函数重载的时候形参不管是不是const的他们都是等价的,除非形参是const引用.举个例子: void fun(int a){...}与void fun(const int a){.. ...
- JS的常用开发框架有哪些?
JS的开发框架有哪些? Yui-ext 基于Yahoo UI的扩展包yui-ext是具有cs风格的web用户界面组件,能实现复杂的Layou布局,界面效果可以和backbase比美,而且使用纯Java ...
- Memcached的过期数据的过期机制及删除机制(LRU)
Memcached的过期数据的过期机制及删除机制1.当某个值过期后,并没有从内存删除,因此,使用stats命令统计时,curr_item参数有信息(不为0)2.当某个新值去占用他的位置时,当成空chu ...
- delphi IOS BLE 代理
代理方法 centralManagerDidUpdateState: peripheralManagerDidUpdateState:代理方法. centralManager:willRestoreS ...