Trucking(HDU 2962 最短路+二分搜索)
Trucking
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2216 Accepted Submission(s): 757
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.
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
0 0
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
题意:给定一个无向图,每条边有长度,通过最大高度两个权值,求解从起点到终点的能通过的最大高度以及在此高度上的最短路径长度
思路:二分搜索,每次进行一次最短路算法Dijkstra,路径更新公式需要添加 map[i][v].h>=p||map[i][v].h==-1
需要注意最后一行不能输出\n PE了两次
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
#define Max 1005
#define INF 9999999
struct node
{
int len,h;
}map[Max][Max];
bool vis[Max];
int dis[Max];
int c,r;
int s,e,height; bool Dijkstra(int p)
{
int i,j;
memset(vis,,sizeof(vis));
for(i=;i<=c;i++)
dis[i]=INF;
dis[s]=;
while(true)
{
int v=;
for(i=;i<=c;i++)
{
if(!vis[i]&&(v==||dis[i]<dis[v]))
v=i;
}
if(v==)
break;
vis[v]=;
//cout<<v<<endl;
// cout<<"3 "<<dis[3]<<endl;
for(i=;i<=c;i++)
{
if(vis[i]==&&(map[i][v].h>=p||map[i][v].h==-)&&(dis[v]+map[i][v].len<dis[i]))
dis[i]=dis[v]+map[i][v].len;
}
}
return dis[e]!=INF;
} int main()
{
int i,j;
int a,b;
int t=;
freopen("in.txt","r",stdin);
while(scanf("%d%d",&c,&r))
{
if(c==&&r==)
break;
for(i=;i<=c;i++)
for(j=;j<=c;j++)
{
map[i][j].h=;
map[i][j].len=INF;
}
for(i=;i<r;i++)
{
scanf("%d%d",&a,&b);
scanf("%d%d",&map[a][b].h,&map[a][b].len);
map[b][a].h=map[a][b].h;
map[b][a].len=map[a][b].len;
}
scanf("%d%d%d",&s,&e,&height);
int lb=,rb=height+,mid,ans,length=INF;
while(rb-lb>)
{
mid=(rb+lb)/;
if(Dijkstra(mid))
{
length=dis[e];
ans=mid;
lb=mid;
}
else
rb=mid;
}
if(t!=)
printf("\n");
if(length==INF)
printf("Case %d:\ncannot reach destination\n",t++);
else
{
printf("Case %d:\n",t++);
printf("maximum height = %d\n",ans);
printf("length of shortest route = %d\n",length);
}
}
}
Trucking(HDU 2962 最短路+二分搜索)的更多相关文章
- Day4 - I - Trucking HDU - 2962
A certain local trucking company would like to transport some goods on a cargo truck from one place ...
- hdu 2962 最短路+二分
题意:最短路上有一条高度限制,给起点和最大高度,求满足高度最大情况下,最短路的距离 不明白为什么枚举所有高度就不对 #include<cstdio> #include<cstring ...
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- UESTC 30 &&HDU 2544最短路【Floyd求解裸题】
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 5521 最短路
Meeting Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU - 2544最短路 (dijkstra算法)
HDU - 2544最短路 Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以 ...
- hdu 2962 Trucking (二分+最短路Spfa)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2962 Trucking Time Limit: 20000/10000 MS (Java/Others ...
- hdu 2962 Trucking (最短路径)
Trucking Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU - 2962 Trucking SPFA+二分
Trucking A certain local trucking company would like to transport some goods on a cargo truck from o ...
随机推荐
- C语言初学 计算三角形面积问题
#include<stdio.h> #include<math.h> #include<stdlib.h> int main() { float a,b,c,s,a ...
- AngularJS自定义表单验证器
<!doctype html> <html ng-app="myApp"> <head> <script src="G:\\So ...
- Reshaper 快捷键
配置单个键盘快捷键 1.在主菜单上,选择Tools | Options 2.在导航视图中选择Environment | Keyboard 3.在命令列表中,选择启动ReSharper的命令名称.浏览列 ...
- NGINX配置小随笔
达到以下效果: 1,特定目录被指定IP访问 2,不是指定的IP地址不能执行URI中特定字符串 3,特定目录中不能执行PHP文件 set $self_visit ''; if ( $request_ur ...
- 简述TVS是的命名和封装
1. 瞬态抑制二极管简称TVS (Transient Voltage Suppressor ),TVS的电气特性由P-N结面积,参杂浓度及晶片阻质决定的.其耐突波电流的能力与其P-N结面积成正比. 特 ...
- BZOJ1662: [Usaco2006 Nov]Round Numbers
1662: [Usaco2006 Nov]Round Numbers Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 147 Solved: 84[Sub ...
- Kill 锁,1222:已超过了锁请求超时时段,
应该是你的表体积很大,处理的时候费事,因为几乎所有数据库操作都需要加或多或少的锁,所以会超时.首先你可以使用select * from sys.sysprocesses where blocked&l ...
- Java使用线程池递归压缩文件夹下面的所有子文件
本文将介绍Java中利用线程池递归的方式压缩文件夹下面的所有子文件,具体方法如下: Gzip单个文件压缩 对于单个文件使用GZip压缩. package date0805.demo1; import ...
- <php>PDO链接方法
<?php //定义数据源 $dsn = "mysql:dbname=mydb;host=localhost"; //$dsn = "sqlsrv:dbname=m ...
- SQL 使用经验
1. 写存储过程,Update数据库表,一定要根据idRow,也就是主键唯一键来更新. 更新操作,如果根据其他条件更新,之后就有的忙活了. 2. Query语句要加NOLOCK