题目大意:给定无向图,每一条路上都有限重,求能到达目的地的最大限重,同时算出其最短路。

题解:由于有限重,所以二分检索,将二分的值代入最短路中,不断保存和更新即可。

#include <cstdio>
#include <cstring>
#include <utility>
#include <queue>
using namespace std;
const int N=20005;
const int INF=9999999;
typedef pair<int,int>seg;
priority_queue<seg,vector<seg>,greater<seg> >q;
int l,r,mid,begin,end,d[N],head[N],u[N],v[N],w[N],next[N],le[N],n,m,a,b,c;
int height,route;
bool vis[N];
void build(){
memset(head,-1,sizeof(head));
for(int e=1;e<=m;e++){
scanf("%d%d%d%d",&u[e],&v[e],&le[e],&w[e]);
if(le[e]==-1)le[e]=INF;
u[e+m]=v[e]; v[e+m]=u[e]; w[e+m]=w[e]; le[e+m]=le[e];
next[e]=head[u[e]]; head[u[e]]=e;
next[e+m]=head[u[e+m]]; head[u[e+m]]=e+m;
}
}
void Dijkstra(int src,int limit){
memset(vis,0,sizeof(vis));
for(int i=0;i<=n;i++) d[i]=INF;
d[src]=0;
q.push(make_pair(d[src],src));
while(!q.empty()){
seg now=q.top(); q.pop();
int x=now.second;
if(vis[x]) continue; vis[x]=true;
for(int e=head[x];e!=-1;e=next[e])
if(d[v[e]]>d[x]+w[e]&&le[e]>=limit){
d[v[e]]=d[x]+w[e];
q.push(make_pair(d[v[e]],v[e]));
}
}
}
int main(){
int cnt=1;
while(~scanf("%d%d",&n,&m)){
height=route=0;
if(m==0&&n==0)break;
if(cnt!=1) puts("");
printf("Case %d:\n",cnt++);
build();
scanf("%d%d%d",&begin,&end,&r);
l=1;
while(l<=r){
mid=(l+r)>>1;
Dijkstra(begin,mid);
if(d[end]!=INF){height=mid;route=d[end];l=mid+1;}
else r=mid-1;
}
if(height==0)puts("cannot reach destination");
else{
printf("maximum height = %d\n",height);
printf("length of shortest route = %d\n",route);
}
}
return 0;
}

HDU 2962 Trucking的更多相关文章

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

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

  2. hdu 2962 Trucking (最短路径)

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

  3. HDU - 2962 Trucking SPFA+二分

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

  4. Trucking(HDU 2962 最短路+二分搜索)

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

  5. Day4 - I - Trucking HDU - 2962

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

  6. UVALive 4223 / HDU 2962 spfa + 二分

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

  7. hdu 2962 最短路+二分

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

  8. hdu 2962 题解

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

  9. HDU题解索引

    HDU 1000 A + B Problem  I/O HDU 1001 Sum Problem  数学 HDU 1002 A + B Problem II  高精度加法 HDU 1003 Maxsu ...

随机推荐

  1. 最新版SDWebImage的使用

    我之前写过一篇博客,介绍缓存处理的三种方式,其中最难,最麻烦,最占内存资源的还是图片缓存,最近做的项目有大量的图片处理,还是采用了SDWebImage来处理,但是发现之前封装好的代码报错了.研究发现, ...

  2. C++/C#结构体转化-传string给C++

    此例是把C#结构传给C++ C++: typedef struct VidyoClientInEventGroupChat_ { /*! Message (contents) to be sent t ...

  3. [C#参考]主线程和子线程之间的参数传递

    几个进程在大多数情况下要包含很多的子线程,那么他们之间免不了的要互相传递很多的参数,那么参数怎么传递的呢? 主线程向子线程传递参数的方法 第一种方法:Thraed类有一个带参数的委托类型的重载形式,这 ...

  4. IOS 物理引擎

    来自IOS7 by tutorials   下面是个人的一点翻译总结 1,首先在初始化方法李画一个方块 UIView* square = [[UIView alloc] initWithFrame: ...

  5. 简单介绍一下ODI的几个基本概念

    简单介绍一下ODI的几个基本概念   ODI的几个基本概念是本文我们主要要介绍的内容,接下来我们就开始介绍这一过程,一起来看看吧! 什么是资料库 ODI资料库可安装在任何支持ANSIISO89的数据库 ...

  6. 6_StopWatch

    6 // // ViewController.swift // StopWatch // // Created by ZC on 16/1/9. // Copyright © 2016年 ZC. Al ...

  7. png图片压缩优化

    1.2 软件环境 软件名称:Opting下载地址: http://optipng.sourceforge.net/ 安装版本:0.7.5安装位置:/apps/svr/opting 安装可能遇到的问题: ...

  8. 跨浏览器resize事件分析

    resize事件 原生事件分析 window一次resize事件: IE7 触发3次, IE8 触发2次, IE9 触发1次, IE10 触发1次 Chrome 触发1次 FF 触发2次 Opera ...

  9. Linux系统编程——进程调度浅析

    概述 操作系统要实现多进程.进程调度不可缺少. 有人说,进程调度是操作系统中最为重要的一个部分.我认为这样的说法说得太绝对了一点,就像非常多人动辄就说"某某函数比某某函数效率高XX倍&quo ...

  10. [C# 基础知识系列]专题六:泛型基础篇——为什么引入泛型

    引言: 前面专题主要介绍了C#1中的2个核心特性——委托和事件,然而在C# 2.0中又引入一个很重要的特性,它就是泛型,大家在平常的操作中肯定会经常碰到并使用它,如果你对于它的一些相关特性还不是很了解 ...