### POJ 1724 题目链接 ###

题目大意:

给你 N 个点 ,M 条有向路,走每条路需要花费 C 元,这段路的长度为 L 。

给你 K 元,问你能否从 1 走到 N 点且花费不超过 K 元。如果可以,输出出最短距离,否则输出 -1 。

显然分层图最短路,这里 dist[i][j] 表示从 1 到 i 点 且 所剩钱数为 j 时的最短路,然后跑一遍 dijkstra 即可。

PS:在优先队列先到达 N 点的即为答案,可以直接返回,不需要等队列走完再 O(N)找最小值,时间会很快(这里还是遍历了一遍 = =)

代码如下: 

#include<iostream>
#include<algorithm>
#include<string.h>
#include<queue>
#define inf 0x3f3f3f3f
#define maxn 308
using namespace std;
int K,N,M,cnt;
int head[maxn],ans;
bool vis[maxn][];
int dist[maxn][];
struct Edge
{
int to;
int val;
int m;
int next;
}edge[maxn*maxn];
struct Node
{
int x;
int k;
int val;
Node(){};
Node(int _x,int _k,int _val){
x=_x,k=_k,val=_val;
}
bool operator < (const Node a) const{
return val>a.val;
}
};
inline void add(int u,int v,int val,int m)
{
edge[++cnt].to=v;
edge[cnt].val=val;
edge[cnt].m=m;
edge[cnt].next=head[u];
head[u]=cnt;
return;
}
void dijkstra()
{
priority_queue<Node> q;
while(!q.empty()) q.pop();
for(int i=;i<=N;i++){
for(int j=;j<=K;j++){
dist[i][j]=inf;
}
}
q.push(Node(,K,));
dist[][K]=;
while(!q.empty())
{
int u=q.top().x,k=q.top().k;
q.pop(); // 这里可以直接 if( u == N) ans = q.top().val ,即为答案
if(vis[u][k]) continue;
vis[u][k]=true;
for(int i=head[u];i;i=edge[i].next){
int v=edge[i].to;
if(k>=edge[i].m){
if(dist[v][k-edge[i].m]>dist[u][k]+edge[i].val){
dist[v][k-edge[i].m]=dist[u][k]+edge[i].val;
q.push(Node(v,k-edge[i].m,dist[v][k-edge[i].m]));
}
}
}
}
return;
}
int main()
{
//freopen("test.in","r",stdin);
//freopen("test.out","w",stdout);
scanf("%d%d%d",&K,&N,&M);
int A,B,C,D;
while(M--)
{
scanf("%d%d%d%d",&A,&B,&C,&D);
add(A,B,C,D);
}
ans=inf;
dijkstra();
for(int i=;i<=K;i++){
ans=min(ans,dist[N][i]);
}
if(ans==inf) printf("-1\n");
else printf("%d\n",ans );
}

POJ 1724 (分层图最短路)的更多相关文章

  1. poj3635Full Tank?[分层图最短路]

    Full Tank? Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7248   Accepted: 2338 Descri ...

  2. HDU 5669 线段树优化建图+分层图最短路

    用线段树维护建图,即把用线段树把每个区间都标号了,Tree1中子节点有到达父节点的单向边,Tree2中父节点有到达子节点的单向边. 每次将源插入Tree1,汇插入Tree2,中间用临时节点相连.那么T ...

  3. BZOJ 2763 分层图最短路

    突然发现我不会分层图最短路,写一发. 就是同层中用双向边相连,用单向边连下一层 #include <cstdio> #include <algorithm> #include ...

  4. 【网络流24题】 No.15 汽车加油行驶问题 (分层图最短路i)

    [题意] 问题描述:给定一个 N*N 的方形网格,设其左上角为起点◎, 坐标为( 1, 1), X 轴向右为正, Y轴向下为正, 每个方格边长为 1, 如图所示. 一辆汽车从起点◎出发驶向右下角终点▲ ...

  5. 【网络流24题】 No.14 孤岛营救问题 (分层图最短路)

    [题意] 1944 年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛, 营救被敌军俘虏的大兵瑞恩. 瑞恩被关押在一个迷宫里, 迷宫地形复杂, 但幸好麦克得到了迷宫的地形图. 迷宫的外形是 ...

  6. BZOJ_2662_[BeiJing wc2012]冻结_分层图最短路

    BZOJ_2662_[BeiJing wc2012]冻结_分层图最短路 Description “我要成为魔法少女!”     “那么,以灵魂为代价,你希望得到什么?” “我要将有关魔法和奇迹的一切, ...

  7. BZOJ_1579_[Usaco2009 Feb]Revamping Trails 道路升级_分层图最短路

    BZOJ_1579_[Usaco2009 Feb]Revamping Trails 道路升级_分层图最短路 Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M ...

  8. Nowcoder contest 370H Rinne Loves Dynamic Graph【分层图最短路】

    <题目链接> 题目大意:Rinne 学到了一个新的奇妙的东西叫做动态图,这里的动态图的定义是边权可以随着操作而变动的图.当我们在这个图上经过一条边的时候,这个图上所有边的边权都会发生变动. ...

  9. ACM-ICPC 2018 南京赛区网络预赛 L 【分层图最短路】

    <题目链接> 题目大意: 有N个城市,这些城市之间有M条有向边,每条边有权值,能够选择K条边 边权置为0,求1到N的最短距离. 解题分析: 分层图最短路模板题,将该图看成 K+1 层图,然 ...

随机推荐

  1. String判断为空的方式

    今天遇到的笔试题: //这样的判空方式是否正确 if(!str.equals("")&&str!=null) 之前我一直都是这么写的,哪知道有什么问题呀,然后面试官 ...

  2. Ribbon负载均衡及Feign消费者调用服务

    微服务调用Ribbon 简介 前面讲了eureka服务注册与发现,但是结合eureka集群的服务调用没讲. 这里的话 就要用到Ribbon,结合eureka,来实现服务的调用: Ribbon是Netf ...

  3. 关于在maven项目中配置文件资源导出问题

    标准的Maven项目都会有一个resources目录来存放我们所有的资源配置文件,但是我们往往在项目中不仅仅会把所有的资源配置文件都放在resources中,同时我们也有可能放在项目中的其他位置,那么 ...

  4. 我眼中的 RPC

    目录 什么是 RPC ? 什么情况下使用 RPC ? RPC 框架原理 RPC 调用过程 RPC 优点 RPC 缺点 PHP RPC 有哪些? 小结 推荐阅读 什么是 RPC ? RPC 是一种框架或 ...

  5. 为什么老外不愿意用MyBatis?

    作者:陈龙 www.zhihu.com/question/309662829 Spring 团队的Josh Long自己在Twitter上做了一个调查.1625次投票,样本量不算大,但也能说明问题.和 ...

  6. 一起学Android之ContentProvider

    本文主要讲解在Android开发中ContentProvider的常规用法,仅供学习分享使用,如有不足之处,还请指正. 访问一个ContentProvider 在Android开发中,应用程序通过Co ...

  7. docker采用Dockerfile安装jdk1.8案例

    1 获取一个简单的Docker系统镜像,并建立一个容器. 这里我选择下载CentOS镜像 docker pull centos 通过docker tag命令将下载的CentOS镜像名称换成centos ...

  8. python django-admin.py startproject xxx 错误:from django.core import management

    1. Python安装路径以及Python安装路径\Script文件夹,已经添加到PATH环境变量中. 2. 查看django 版本正常: import django print(django.__v ...

  9. Selenium(八):其他操作元素的方法、冻结界面、弹出对话框、开发技巧

    1. 其他操作元素的方法 之前我们对web元素做的操作主要是:选择元素,然后点击元素或者输入字符串. 还有没有其他的操作了呢?有. 比如:比如鼠标右键点击.双击.移动鼠标到某个元素.鼠标拖拽等. 这些 ...

  10. 在python函数中默认参数的一些坑

    一.默认参数 python为了简化函数的调用,提供了默认参数机制: 这样在调用pow函数时,就可以省略最后一个参数不写: 在定义有默认参数的函数时,需要注意以下: 必选参数必须在前面,默认参数在后: ...