### 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 );
}

最新文章

  1. Map Network Driver
  2. JS重载
  3. Linux C 字符串输入函数 gets()、fgets()、scanf() 详解
  4. .net core 学习笔记(4)-ViewComponent
  5. AE唯一值符号化的流程以及过程
  6. JavaScript-语法基础
  7. Python入门笔记(23):模块
  8. 通过程序校验xml文档学习笔记
  9. 【redis】06Redis的高级应用之事务处理、持久化操作、pub_sub、虚拟内存
  10. Getting started with Apache Camel--转载
  11. Android应用启动画面
  12. Nginx的事件处理机制
  13. maven 引用自己的jar
  14. 利用jmeter进行数据库测试
  15. 安装pwntools
  16. SpringAop实操之记录关键业务请求数据
  17. CF 799B T-shirt buying
  18. js中的try/catch
  19. 桌面图形化安装的CentOS6.7中默认安装的yum不能正常使用
  20. apache ab压力测试报错apr_socket_recv

热门文章

  1. 程序员:May the Force be with you!
  2. 2019/12/12学习内容摘要(Linux系统用户与用户组管理②)
  3. CodeForces - 1265D(贪心+暴力)
  4. mongodb基本安装
  5. jenkins 分布式配置+allure集成+邮件发送
  6. ReactNative: 创建自定义List列表组件
  7. lxml导入
  8. jmeter 中使用正则表达式提取依赖参数
  9. QT使用QPainter加水印
  10. Python中为什么不能用可变对象作为默认参数的值