---恢复内容开始---

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962

Trucking

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11428    Accepted Submission(s): 1104

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

 
Source
 
Recommend
gaojie   |   We have carefully selected several similar problems for you:  2722 1690 1598 1217 1142 
 
题目大意:输入C,R,代表城市个数,道路个数,下面的R行,每行4个数,a,b,c,e,分别代表 a和b之间有路,height值是c,length值是e,当c=-1时代表没有限制
最后一行三个数代表起点、终点、height的限制,输出最大的height,如果有一样的,输出最小的总length

思路:这题既要控制最短路,也要控制height值的最大,总思路就是二分+最短路。

二分控制最大的height,最短路控制最小的路径。  值得一提的是这题格式很严格,写不对就是wa...不会PE,  还有时限卡的很紧,能优化的最好都优化了

具体看代码

#include<iostream>
#include<string.h>
#include<map>
#include<cstdio>
#include<cstring>
#include<stdio.h>
#include<cmath>
#include<ctype.h>
#include<math.h>
#include<algorithm>
#include<set>
#include<queue>
typedef long long ll;
using namespace std;
const ll mod=1e9+;
const int maxn=1e3+;
const int maxk=5e3+;
const int maxx=1e4+;
const ll maxe=+;
#define INF 0x3f3f3f3f3f3f
#define Lson l,mid,rt<<1
#define Rson mid+1,r,rt<<1|1
int d[maxn];//用来存储起点到该点的最短距离,初始化为足够大
int height[maxn][maxn],le[maxn][maxn];//两点间的height,length
int C,R,S,E,limit,max_he,min_le,he;//
bool vis[maxn];//是否访问过,初始化false
void init()
{
//memset(height,-1,sizeof(height));
for(int i=;i<=C;i++)
{
for(int j=;j<=i;j++)
{
le[i][j]=le[j][i]=mod;
height[i][j]=-;
}
}
}
bool solve(int mid)
{
memset(vis,false,sizeof(vis));
for(int i=;i<=C;i++)
{
if(height[S][i]>=mid) d[i]=le[S][i];
else d[i]=mod;
//d[i]=mod;
//vis[i]=false;
}
//d[S]=0;
//he=mod;
while(true)
{
int flag=-;
for(int i=;i<=C;i++)
{
if(!vis[i]&&d[i]!=mod&&(flag==-||d[i]<d[flag]))//没有访问过并且距离不等于mod,因为等于mod代表当前不能走
flag=i;
}
if(flag==-) break;
if(flag==E) return d[flag]!=mod;//这里也是一步优化,只要走到了结束点就行了
vis[flag]=true;
for(int i=;i<=C;i++)
{
//if(le[i][flag]>mid) continue;
if(height[i][flag]<mid) continue;
d[i]=min(d[i],d[flag]+le[flag][i]);
//he=min(he,height[i][flag]);
//d[i]=min(d[i],d[flag]+le[flag][i]);
}
}
return d[E]!=mod;
}
int main()
{
int ca=;
//while(cin>>C>>R)
while(scanf("%d%d",&C,&R)!=EOF)
{ if(C==&&R==) break;
if(ca!=) printf("\n");//这个好像一定要放在break的后面,反正我放在前面wa了
init();
int a,b,c,e;
for(int i=;i<R;i++)
{
scanf("%d%d%d%d",&a,&b,&c,&e);
//cin>>a>>b>>c>>e;
if(c==-) c=mod;//c=-1的话,初始化为无穷大
height[a][b]=c;
height[b][a]=c;
le[a][b]=e;
le[b][a]=e;
}
//cin>>S>>E>>limit;
scanf("%d%d%d",&S,&E,&limit);
int l=,r=limit;
min_le=,max_he=;
while(l<=r)//从0~imit开始二分
{
int mid=(l+r)/;
if(solve(mid))//mid值可以满足,寻求更大的
{
max_he=mid;
min_le=d[E];
l=mid+;
}
else//不能满足,寻求小的
r=mid-;
}
printf("Case %d:\n",ca++);
if(min_le+max_he==) printf("cannot reach destination\n");
else
{
printf("maximum height = %d\n",max_he);
printf("length of shortest route = %d\n",min_le);
} }
return ;
}

UVALive - 4223(hdu 2926)的更多相关文章

  1. UVALive 4223 / HDU 2962 spfa + 二分

    Trucking Problem Description A certain local trucking company would like to transport some goods on ...

  2. UVALive 4223 Trucking 二分+spfa

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

  3. UVALive - 4223,hdu2962(简单dijkstra)

    Trucking Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. 二分+最短路 UVALive - 4223

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

  5. bzoj千题计划210:bzoj2642 | Poj3968 | UVALive 4992| hdu 3761 Jungle Outpost

    http://www.lydsy.com/JudgeOnline/problem.php?id=2642 题意: n个瞭望台,形成一个凸n边形.这些瞭望台的保护范围是这个凸包内的任意点. 敌人进攻时, ...

  6. UVALive 4225 / HDU 2964 Prime Bases 贪心

    Prime Bases Problem Description Given any integer base b >= 2, it is well known that every positi ...

  7. UVALive 4222 /HDU 2961 Dance 大模拟

    Dance Problem Description For a dance to be proper in the Altered Culture of Machinema, it must abid ...

  8. UVALive 4192/HDU 2959 Close Enough Computations 数学

    Close Enough Computations Problem Description The nutritional food label has become ubiquitous. A sa ...

  9. 【ACM】那些年,我们挖(WA)过的最短路

    不定时更新博客,该博客仅仅是一篇关于最短路的题集,题目顺序随机. 算法思想什么的,我就随便说(复)说(制)咯: Dijkstra算法:以起始点为中心向外层层扩展,直到扩展到终点为止.有贪心的意思. 大 ...

随机推荐

  1. PythonPath在Windows 下的设置

    今天在调试Evernote SDK时, 遇到PythonPath的问题. 查了很多资料,有说用系统环境变量添加PythonPath, 有说在注册表中的PythonPath添加新Default字段, 但 ...

  2. Linux系统主流架构一

    Linux系统主流架构一 随着IT运维的不断发展,尤其的Linux的飞速发展,越来越多的企业开始使用Linux操作系统,例如:Centos.Red Hat.Ubuntu.Fadora等等,成千上亿个网 ...

  3. JSP介绍(4)--- JSP Cookie 处理

    Cookie是存储在客户机的文本文件,它们保存了大量轨迹信息. JSP脚本通过request对象中的getCookies()方法来访问这些cookie,这个方法会返回一个Cookie对象的数组. 通常 ...

  4. 使用python对文件夹里面所有代码行数进行统计。

    统计目录下所有的代码个数和总行数. # -*- coding: utf-8 -*- # @Author : ydf import json import os from pathlib import ...

  5. Debain install Jupyter

    1. install Anaconda https://www.anaconda.com/download/#linux 2. config jupyter $ ipython from notebo ...

  6. 3DES加密/解密

    /// <summary> /// C#/PHP/JSP 3DES 加密与解密(只支持UTF-8编码) /// </summary> public class Crypto3D ...

  7. Spring开发包介绍

    -----------------siwuxie095                         核心开发包         建立 Spring 工程时,需要引入 Spring 的开发包,否则无 ...

  8. Maven的pom实例

    该pom中包含了一些我认为会需要的东西,并且加了注释.可以根据需求适当删减. 包含了spring-mvc , junit,hibernate验证,json,apache-commons组件 还有 co ...

  9. android studio在windows上设置git/ssh

    windows果然是与众不同的,凡事都要那么麻烦一点点(当然..是对程序员来说..) 一开始,我想用cygwin里的git,就省得我再多装一套软件,配置也可以统一,但事实证明不行 在android s ...

  10. 8、linux-数字计算

    bash内置了对整数四则运算的支持,但是并不支持浮点运算 bc命令是一种支持任意精度的交互执行的计算器语言,而bc命令可以很方便的进行浮点运算,当然整数运算也不再话下 在bc工作环境下,可以使用以下计 ...