Trucking (spfa+2分)
来源:互联网 发布:理肤泉b5真假知乎 编辑:程序博客网 时间:2024/05/02 01:57
A certain local trucking company would like to transport some goods on a cargo truck from one place to another. It is desirable to transport as much goods as possible each trip. Unfortunately, one cannot always use the roads in the shortest route: some roads may have obstacles (e.g. bridge overpass, tunnels) which limit heights of the goods transported. Therefore, the company would like to transport as much as possible each trip, and then choose the shortest route that can be used to transport that amount.
For the given cargo truck, maximizing the height of the goods transported is equivalent to maximizing the amount of goods transported. For safety reasons, there is a certain height limit for the cargo truck which cannot be exceeded.
For the given cargo truck, maximizing the height of the goods transported is equivalent to maximizing the amount of goods transported. For safety reasons, there is a certain height limit for the cargo truck which cannot be exceeded.
5 61 2 7 51 3 4 22 4 -1 102 5 2 43 4 10 14 5 8 51 5 105 61 2 7 51 3 4 22 4 -1 102 5 2 43 4 10 14 5 8 51 5 43 11 2 -1 1001 3 100 0
Sample Output
Case 1:maximum height = 7length of shortest route = 20Case 2:maximum height = 4length of shortest route = 8
Case 3:cannot reach destination
思路: 这个题其实挺难的,他有两个条件,一个是车有多高,还一个就是最短路,其中车的装载高度是第一位的,因此,首先一个很自然的想法应该是,从他给的车的最大高度逐渐向下枚举,直到找到一个存在最短路的高度就行了,这样在时间上肯定不太可行,所以很自然就转到二分了。
#include<cstdio>#include<cstring>#include<map>#include<cmath>#include<algorithm>#include<string>#include<iostream>#include<queue>using namespace std;const int inf = 0x3f3f3f3f;int n,m;int limit[1100][1100];int dist[1100][1100];int inq[200100];int dis[200100];int spfa(int be,int ed,int h){ memset(inq,0,sizeof(inq)); memset(dis,inf,sizeof(dis)); dis[be] = 0; queue <int> q; q.push(be); while(!q.empty()) { int tmp = q.front(); q.pop(); inq[tmp] = 0; for(int i = 1; i <= n; i++) { if(limit[tmp][i] < h && limit[tmp][i] != -1) continue; if(dist[tmp][i] + dis[tmp] < dis[i]) { dis[i] = dis[tmp] + dist[tmp][i]; if(!inq[i]) q.push(i); } } } if(dis[ed] == inf) return 0; else return dis[ed];}int main(){ int index = 1; while(scanf("%d%d",&n,&m)&&m+n) { memset(limit,-1,sizeof(limit)); memset(dist,inf,sizeof(dist)); for(int i = 0; i < m; i++) { int x,y,l,d; scanf("%d%d%d%d",&x,&y,&l,&d); if(limit[x][y] < l) limit[x][y] = limit[y][x] = l; if(dist[x][y] > d) dist[x][y] = dist[y][x] = d; } int be,ed,load; scanf("%d%d%d",&be,&ed,&load); int l = 0, r = load; while(l <= r) { int mid = (l+r) / 2; if(spfa(be,ed,mid)==0) r = mid - 1; else l = mid + 1; } l--; int ans = spfa(be,ed,l); if(index != 1) printf("\n"); printf("Case %d:\n",index++); if(l <= 0) printf("cannot reach destination\n"); else printf("maximum height = %d\nlength of shortest route = %d\n",l,ans); } return 0;}
阅读全文
0 0
- Trucking (spfa+2分)
- hdu2296||UVALive 4223 Trucking (二分+spfa)
- hdu 2962 Trucking (最短路之SPFA算法 + 二分)
- hdu 2962 Trucking【二分+SPFA】
- hdu 2962 Trucking (二分+最短路Spfa)
- Trucking
- 【最短路+dijkstra+spfa】杭电 hdu 2962 Trucking
- POJ1364 King(差分约束+Spfa)
- POJ3159差分约束(SPFA)
- POJ3169差分约束(SPFA)
- uva11478(差分约束,spfa求负环)
- POJ 3159 (差分约束+spfa)
- POJ3169 差分约束系统(+SPFA)
- hdu 2962 Trucking(二分+最短路)
- ssl2339 分糖果 spfa
- hdu 2962 Trucking 最短路+二分。。Dijkstra+SPFA两种算法实现。
- (hdu1534)Schedule Problem(差分约束+SPFA算法)
- POJ1201/ZOJ1508/HDU1384 Intervals(spfa解差分约束问题)
- cglib动态代理
- Golang版Tensorflow安装记录
- leetcode之分治总结
- 如何快速全面建立自己的大数据知识体系
- 大数相乘问题(java版)
- Trucking (spfa+2分)
- 一天的电话面试题
- Eclipse集成Maven打包时报错:Unknown lifecycle phase "mvn". You must specify a valid lifecycle phase or a goa
- 创业后的一些反思
- Linux虚拟机安装用户指南
- Linux网络编程之网络编程基础服务端
- 网络学习笔记-Ip首部
- 自动补全 jqueryUi 的autocomplete部件,中文不灵敏问题
- 今日头条(TodayNews)