http://poj.org/problem?id=1724

题意:

Bob现在有的钱数为k,他想从城市1到城市n,给出m条连接两个城市的有向边,并且给出路的长度w,和经过这条路要交的钱数c。问Bob在花的过路费不超过k的前提下能到达城市n的最短路径为多长。

思路:

才开始我想spfa来做,开两个数组dis记录距离最短disw记录话费最小,在松弛的时候进行距离与费用的限制来进行,可是发现当某一个点被多个点更新时,比如i点被更新为[7,12] [9,9] [12,7]

那我们选择哪一个呢?如果我们选择路径短的话,[7,12] 可是可能时间总和就会超出k,如果我们选择费用小的话[12,7] 可是路径的长度可能不如选择[9,9]的短,所以无法做出选择。

这里我们用bfs来做,队列用优先队列实现,这里有了两个保证:1:bfs本身搜索的过程就是找最值得过程,我们用它来实现费用最小;2:优先队列每次出来的是路径最小的那么我们又得到了路径最小的满足。一举两得啊!!

View Code

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#define maxn 107
using namespace std;const int inf = 0x7fffffff;struct node
{int v;int l,w;node *next;
}H[maxn*maxn],*head[maxn];//搜索过程中的记录
struct nn
{int cost;int len;int pos;friend bool operator < (nn a, nn b){return a.len > b.len;}
};int n,m,k,t,ans;
priority_queue<nn>que;void insert(int u,int v,int l,int w)
{node *q = &H[t++];q->v = v;q->l = l;q->w = w;q->next = head[u];head[u] = q;
}void bfs(int s)
{nn p;p.cost = 0;p.len = 0;p.pos = s;que.push(p);while (!que.empty()){nn u = que.top(); que.pop();if (u.pos == n){ans = u.len;break;}node *q;for (q = head[u.pos]; q ; q = q->next){nn tp;tp.pos = q->v;if (u.cost + q->w <= k){tp.cost = u.cost + q->w;tp.len = u.len + q->l;que.push(tp);}}}}
int main()
{//freopen("d.txt","r",stdin);int i,a,b,l,w;t = 0; ans = inf;scanf("%d%d%d",&k,&n,&m);for (i = 0; i < m; ++i){scanf("%d%d%d%d",&a,&b,&l,&w);insert(a,b,l,w);}bfs(1);if (ans != inf) printf("%d\n",ans);else printf("-1\n");return 0;
}

pku 1724 ROADS BFS +优先队列相关推荐

  1. hdu 1254(dfs+bfs+优先队列)

    推箱子 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Desc ...

  2. nc15665 maze 题解 (传送门) 广搜bfs+优先队列

    maze:原题链接 题目描述: 小明来到一个由n x m个格子组成的迷宫 ,有些格子是陷阱,用'#'表示,小明进入陷阱就会死亡,'.'表示没有陷阱.小明所在的位置用'S'表示,目的地用'T'表示. 小 ...

  3. POJ 1724 ROADS(bfs最短路)

    n个点m条边的有向图,每条边有距离跟花费两个参数,求1->n花费在K以内的最短路. 直接优先队列bfs暴力搞就行了,100*10000个状态而已.节点扩充的时候,dp[i][j]表示到达第i点花 ...

  4. 杭电1254java实现(双bfs 优先队列)

    推箱子 推箱子是一个很经典的游戏.今天我们来玩一个简单版本.在一个M*N的房间里有一个箱子和一个搬运工,搬运工的工作就是把箱子推到指定的位置,注意,搬运工只能推箱子而不能拉箱子,因此如果箱子被推到一个 ...

  5. HihoCoder - 1828 Saving Tang Monk II(bfs+动态规划/bfs+优先队列)

    题目链接:点击查看 题目大意:孙悟空要走迷宫去救唐僧,给出n和m约束迷宫大小: 迷宫中: S代表起点 T代表终点 B代表氧气区,经过可以获得一罐氧气,最多储存5罐氧气 #代表毒气区,经过需要花费2个时 ...

  6. UVa 10603 Fill (BFS+优先队列)

    题意:给定4个数,a,b,c,d,分别代表空杯子容积为a,b,一个盛满水的杯子容积为c,让你不断倒水,找一个dd,是不是存在某个时刻,某个杯子里的水dd,和d相同,或者无限接近.让求最少的倒水量和dd ...

  7. bfs+优先队列(hdu1242)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1242 这题目就是个大坑,先说下思路就是在遇到'x'时要多停留1步,另外就是要用到优先队列,要从小到大排列, ...

  8. hdu 1818 It's not a Bug, It's a Feature!(位运算+bfs优先队列)

    题意:给一个长度为n的bug,和m个补丁,然后是m个补丁的描述.第一个数字是这个补丁消耗的时间. 第1个字符串是这个补丁要工作需要满足的条件,第2个字符串是这个补丁的作用 详细一点说, 对于第一个字符 ...

  9. hdu1026 迷宫王子救公主 BFS+优先队列

    //简单BFS,保存路径 有点麻烦 #include<stdio.h> #include<string.h> #include<queue> using names ...

最新文章

  1. 周志华,李航来智源大会了!
  2. 自绘制HT For Web ComboBox下拉框组件
  3. C++自学24:唯一智能指针(make_unique/unique_ptr/reset/release/get/13.1)
  4. JavaScript 字符串属性和方法
  5. 具有自适应空间强度约束和隶属度链接的鲁棒模糊c均值聚类算法
  6. 毕向东java视频js_js foteach 传智播客毕向东老师 新版JAVASE基础学习视频教程 ...(8)...
  7. Linux下SPI Flash-W25Q64驱动调试
  8. 2021牛客多校9.F.Train Wreck 构造
  9. 使用lio_sam建图,然后使用LIO-SAM_based_relocalization-master导航
  10. 五种典型开发周期模型(瀑布、V、原型化、螺旋、迭代)
  11. 牛客网 水题 递推找规律
  12. 计算机图像抠图有什么作用,电脑图片抠图怎么弄,如何在电脑上把图片里的某一部分抠出来...
  13. 批量去除PDF的水印(完全免费)
  14. 分享一个外国免费在线领各类软件激活码的网站
  15. 给定一个接口,测试人员应该如何测试?
  16. Elementui删除表格最后一页全部数据后跳到前一页的骚气写法
  17. 第3次作业-卷积神经网络
  18. idenet 学习记录:bili
  19. 截止2021年4月最全全国2800多个学校的图标logo打包,全国大学校徽logo
  20. 密西根大学-安娜堡分校计算机科学与技术,世界大学排名之:美国密歇根大学安娜堡分校...

热门文章

  1. 那些年让你迷惑的阻塞、非阻塞、异步、同步
  2. Pytorch翻车记录:单卡改多卡踩坑记!
  3. 京东智能情感客服挽救一名学生生命,“可信赖的AI”用温暖前行
  4. 图文详解什么是快速排序
  5. 【学术前沿】26 亿参数量,水平接近人类,Google 的开放领域聊天机器人意义何在?...
  6. 学霸女孩放弃保研再次高考,原因让人泪目…
  7. 【每日一算法】什么是二分图?
  8. linux查看服务器外网ip方法
  9. 使用Pyecharts制作Bar3D用法详解
  10. Django博客系统(首页分类数据展示)