Trucking

Problem Description
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.

 
Input
The input consists of a number of cases. Each case starts with two integers, separated by a space, on a line. These two integers are the number of cities (C) and the number of roads (R). There are at most 1000 cities, numbered from 1. This is followed by R lines each containing the city numbers of the cities connected by that road, the maximum height allowed on that road, and the length of that road. The maximum height for each road is a positive integer, except that a height of -1 indicates that there is no height limit on that road. The length of each road is a positive integer at most 1000. Every road can be travelled in both directions, and there is at most one road connecting each distinct pair of cities. Finally, the last line of each case consists of the start and end city numbers, as well as the height limit (a positive integer) of the cargo truck. The input terminates when C = R = 0.
 
Output
For each case, print the case number followed by the maximum height of the cargo truck allowed and the length of the shortest route. Use the format as shown in the sample output. If it is not possible to reach the end city from the start city, print "cannot reach destination" after the case number. Print a blank line between the output of the cases.
 
Sample Input
5 6
1 2 7 5
1 3 4 2
2 4 -1 10
2 5 2 4
3 4 10 1
4 5 8 5
1 5 10
5 6
1 2 7 5
1 3 4 2
2 4 -1 10
2 5 2 4
3 4 10 1
4 5 8 5
1 5 4
3 1
1 2 -1 100
1 3 10
0 0
 
Sample Output
Case 1:
maximum height = 7
length of shortest route = 20

Case 2:
maximum height = 4
length of shortest route = 8

Case 3:
cannot reach destination

 
题意:
   给出一无向图 每条路对卡车的高度都有限制 求从起点到终点 卡车最高的高度及行进的最短路 
 
题解:
    我们二分高度,  
  在这个高度下进行一次最短路,解决是否能到达 终点,能的话记录 路径长度
  更新答案
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include<queue>
using namespace std ;
typedef long long ll; const int N = + ;
const int inf = 1e9 + ; int dis[N],head[N],vis[N],t,n,m,T;
struct ss{
int to,h,v,next;
}e[N];
void add(int u,int v,int h,int w) {
e[t].to = v;
e[t].next = head[u];
e[t].v = w;
e[t].h = h;
head[u] = t++;
}
int spfa(int x,int limt) {
queue<int >q;
for(int i = ; i <= n; i++) dis[i] = inf, vis[i] = ;
dis[x] = ;
q.push(x);
vis[x] = ;
while(!q.empty()) {
int k = q.front();
q.pop();vis[k] = ;
for(int i = head[k]; i; i = e[i].next) {
if(e[i].h < limt) continue;
if(dis[e[i].to] > dis[k] + e[i].v) {
dis[e[i].to] = dis[k] + e[i].v;
if(!vis[e[i].to]) {
vis[e[i].to] = ;
q.push(e[i].to);
}
}
}
}
return dis[T];
}
int main() {
int a,b,h,v,S,cas = ;
while(~scanf("%d%d",&n,&m)) {
if(!n || !m) break;
if (cas > ) printf ("\n");
t = ; memset(head,,sizeof(head));
for(int i = ; i <= m; i++) {
scanf("%d%d%d%d",&a,&b,&h,&v);
if(h == -) h = inf;
add(a,b,h,v);
add(b,a,h,v);
}
scanf("%d%d%d",&S,&T,&h);
int l = , r = h, ans = inf;
while(l < r) {
int mid = (l + r + ) >> ;
if(spfa(S,mid) != inf) l = mid, ans = dis[T];
else r = mid - ;
}
printf ("Case %d:\n", cas++);
if(ans != inf) printf ("maximum height = %d\nlength of shortest route = %d\n", l, ans);
else {
printf("cannot reach destination\n");
}
}
return ;
}

UVALive 4223 / HDU 2962 spfa + 二分的更多相关文章

  1. hdu 2962 Trucking (二分+最短路Spfa)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 Trucking Time Limit: 20000/10000 MS (Java/Others ...

  2. UVALive - 4223(hdu 2926)

    ---恢复内容开始--- 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 Trucking Time Limit: 20000/10000 MS ...

  3. hdu 2962 题解

    题目 题意 给出一张图,每条道路有限高,给出车子的起点,终点,最高高度,问在保证高度尽可能高的情况下的最短路,如果不存在输出 $ cannot  reach  destination $ 跟前面 $ ...

  4. UVALive 4223 Trucking 二分+spfa

    Trucking 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8& ...

  5. HDU - 2962 Trucking SPFA+二分

    Trucking A certain local trucking company would like to transport some goods on a cargo truck from o ...

  6. 二分+最短路 UVALive - 4223

    题目链接:https://vjudge.net/contest/244167#problem/E 这题做了好久都还是超时,看了博客才发现可以用二分+最短路(dijkstra和spfa都可以),也可以用 ...

  7. hdu 1839 Delay Constrained Maximum Capacity Path(spfa+二分)

    Delay Constrained Maximum Capacity Path Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65 ...

  8. hdu 2962 最短路+二分

    题意:最短路上有一条高度限制,给起点和最大高度,求满足高度最大情况下,最短路的距离 不明白为什么枚举所有高度就不对 #include<cstdio> #include<cstring ...

  9. 【HDOJ1529】【差分约束+SPFA+二分】

    http://acm.hdu.edu.cn/showproblem.php?pid=1529 Cashier Employment Time Limit: 2000/1000 MS (Java/Oth ...

随机推荐

  1. Chrome插件开发新手教程

    近期在用百词斩这个站点来学单词,感觉非常不错,就是在回想单词列表的时候仅仅有单词和意思.却没有读音.感觉非常不方便,思来思去,想到了Chrome插件能够胜任这个工作.于是小小的研究了一下. Chrom ...

  2. String与StringBuffer的差别

    String 是一个常量,即一旦创建不可更改 输出结果为:helloworldjeok 看似.string变量name的值改变了,事实上此name非彼name. 输出结果为: sex:hello wo ...

  3. 网页爬虫框架jsoup介绍

    序言:在不知道jsoup框架前,因为项目需求.须要定时抓取其它站点上的内容.便想到用HttpClient方式获取指定站点的内容.这样的方法比較笨,就是通过url请求指定站点.依据指定站点返回文本解析. ...

  4. 这里是指推送通知跟NSNotification有区别:

    1.NSNotification是系统内部发出通知,一般用于内部事件的监听,或者状态的改变等等,是不可见的2.本地通知与远程通知是可见的,主要用于告知用户或者发送一些App的内容更新,推送一些相关的消 ...

  5. CentOS 7 安装 vmware tools 提示The path "" is not a valid path to the 3.10.0-957.el7.x86_64 kernel headers.

    输入“mkdir /mnt/cdrom”在/mnt目录下新建一个名为cdrom的文件夹 mkdir /mnt/cdrom 输入“mount -t iso9660 /dev/cdrom /mnt/cdr ...

  6. Windows下Word.exe在哪?

    在这里: C:\Program Files\Microsoft Office\root\Office16

  7. 30.QT IDE编写

    mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTe ...

  8. ROS-Gazebo-turtlebot3仿真

    前言:Gazebo是一款强大的3D仿真器,支持机器人开发所需的机器人.传感器和环境模型,并且通过搭载的物理引擎可以得到逼真的仿真结果.即便Gazebo是一款开源仿真器,却具有高水准的仿真性能,因此在机 ...

  9. 算法入门经典第六章 例题6-14 Abbott的复仇(Abbott's Revenge)BFS算法实现

    Sample Input 3 1 N 3 3 1 1 WL NR * 1 2 WLF NR ER * 1 3 NL ER * 2 1 SL WR NF * 2 2 SL WF ELF * 2 3 SF ...

  10. Java 系列之spring学习--springmvc搭建(四)

    一.建立java web 项目 二.添加jar包 spring jar包下载地址http://repo.spring.io/release/org/springframework/spring/ 2. ...