洛谷 P4009 汽车加油行驶问题 题解
原题题面
网络流24题?费用流?不存在的
tag都是骗人的
首先看题,仔细想想,这不就是一个最短路吗?
然而本蒟蒻看不出一些题解中说的分层图最短路,于是直接写单源最短路
从 (1,1) 往 (n,n) 跑最短路,以 dis[x][y][res] 来记录当位于 (x,y) 时还能再跑 res 条边的最小花费
每次扩展节点的时候更新加油的花费, 注意当(x,y) 有油库时强制加油,没有时可不加
最后 for i from 0 to k 统计 dis[n][n][i] 的最小值,即为答案
实现细节见代码
Tips:代码中含有 __gnu_pbds::priority_queue 与 std::tuple ,可能引起强烈不适,请谨慎食用
1 #ifndef ONLINE_JUDGE 2 #define _EXT_ENC_FILEBUF_H 1 3 #define _EXT_CODECVT_SPECIALIZATIONS_H 1 4 #endif // ONLINE_JUDGE 5 #include<bits/stdc++.h> 6 #include<bits/extc++.h> 7 using namespace std; 8 typedef tuple<int,int,int> pit; // x, y, res 9 constexpr int fx[5][2]={{0,0},{1,0},{0,-1},{-1,0},{0,1}}; 10 int n,K,A,B,C,ans=numeric_limits<int>::max(); 11 int dis[150][150][20]; 12 bool in[150][150][20],oil[150][150]; 13 struct cmp{bool operator()(pit a,pit b) 14 {return dis[get<0>(a)][get<1>(a)][get<2>(a)]>dis[get<0>(b)][get<1>(b)][get<2>(b)];}}; 15 __gnu_pbds::priority_queue<pit,cmp,__gnu_pbds::pairing_heap_tag> q; 16 void SPFA(); 17 int main() 18 { 19 scanf("%d%d%d%d%d",&n,&K,&A,&B,&C); 20 for(int i=1;i<=n;i++) 21 for(int j=1;j<=n;j++){ 22 int col; 23 scanf("%d",&col); 24 oil[i][j]=(col==1); 25 } 26 SPFA(); 27 for(int i=0;i<=K;i++) 28 ans=min(ans,dis[n][n][i]); 29 printf("%d",ans); 30 } 31 void SPFA() 32 { 33 memset(dis,0x7f,sizeof(dis)); 34 dis[1][1][K]=0; 35 in[1][1][K]=true; 36 q.push(make_tuple(1,1,K)); 37 while(!q.empty()){ 38 int x,y,res; 39 tie(x,y,res)=q.top(); 40 q.pop(); 41 in[x][y][res]=false; 42 if(oil[x][y]&&res!=K){ 43 if(dis[x][y][K]>dis[x][y][res]+A){ 44 dis[x][y][K]=dis[x][y][res]+A; 45 if(!in[x][y][K]){ 46 q.push(make_tuple(x,y,K)); 47 in[x][y][K]=true; 48 } 49 } 50 continue; 51 } 52 if(dis[x][y][K]>dis[x][y][res]+A+C){ 53 dis[x][y][K]=dis[x][y][res]+A+C; 54 if(!in[x][y][K]){ 55 q.push(make_tuple(x,y,K)); 56 in[x][y][K]=true; 57 } 58 } 59 if(res<=0) continue; 60 for(int i=1;i<=4;i++){ 61 int xi=x+fx[i][0],yi=y+fx[i][1]; 62 if(xi<1||xi>n||yi<1||yi>n) continue; 63 int cost=(xi<x||yi<y)?B:0; 64 if(dis[xi][yi][res-1]>dis[x][y][res]+cost){ 65 dis[xi][yi][res-1]=dis[x][y][res]+cost; 66 if(!in[xi][yi][res-1]){ 67 q.push(make_tuple(xi,yi,res-1)); 68 in[xi][yi][res-1]=true; 69 } 70 } 71 } 72 } 73 }
View Code
转载于:https://www.cnblogs.com/Sepia/p/10121810.html
洛谷 P4009 汽车加油行驶问题 题解相关推荐
- 洛谷 - P4009 汽车加油行驶问题(分层图最短路/最小费用最大流)
题目链接:点击查看 题目大意:给出一个n*n的矩阵表示道路,途中有一些加油站,现在要从点(1,1)到达点(n,n),问最小花费,其中的一些规则如下: 汽车只能沿着网格边行驶,装满油后可以行驶K条边,出 ...
- Loj#6223 Luogu P4009 汽车加油行驶 分层图最短路
这是本蒟蒻博客的第一篇文章,不规范之处敬请各位大佬指正和谅解orz Loj#6223+Luogu P4009 文章目录 前言 一.建模 二.代码实现 1.节点在图中的编号(分层图的存储) 2.建边 对 ...
- P4009 汽车加油行驶问题
题目描述: 题解: 看了很多题解,无论什么解法都绕不开分层图 在本题中加满油的车每次可以移动K步,那么我们就可以建立一个K+1层的分层图,表示汽车油量k的状态(油量0-k),然后根据题目要求建图 首先 ...
- 孤岛营救与汽车加油行驶问题
题目链接:https://www.luogu.org/problemnew/show/P4011 (孤岛营救)|| https://www.luogu.org/problemnew/show/P400 ...
- 【线性规划与网络流24题】汽车加油行驶问题 分层图
汽车加油行驶问题 Time Limit: 1 Sec Memory Limit: 128 MB Description 给定一个 N*N的方形网格,设其左上角为起点◎,坐标为( 1,1),X轴向右为 ...
- 洛谷P5520 [yLOI2019] 青原樱 题解
洛谷P5520 [yLOI2019] 青原樱 题解 题目链接:P5520 [yLOI2019] 青原樱 题意: n n n 个空放 m m m 个物品,两两物品不能直接相邻,至少空一格 纯数学题. 看 ...
- 洛谷P5633 最小度限制生成树 题解
洛谷P5633 最小度限制生成树 题解 题目链接:P5633 最小度限制生成树 题意: 给你一个有 n n n 个节点, m m m 条边的带权无向图,你需要求得一个生成树,使边权总和最小,且满足编号 ...
- 洛谷P2619 [国家集训队]Tree I 题解
洛谷P2619 [国家集训队]Tree I 题解 题目链接:P2619 [国家集训队]Tree I 题意: 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有 need\text{n ...
- 洛谷P1282 多米诺骨牌 题解
洛谷P1282 多米诺骨牌 题解 题目链接:P1282 多米诺骨牌 题意: 多米诺骨牌由上下 222 个方块组成,每个方块中有 1∼61\sim61∼6 个点.现有排成行的上方块中点数之和记为 S1S ...
最新文章
- [洛谷P4721]【模板】分治 FFT
- $_FILES error(笔记)
- 多线程Java Socket编程示例
- 计算php代码执行时间长短的类(精确到毫秒)
- nginx源码分析configure脚本详解
- SQL case when 2种用法
- java多线程实战指南_学习笔记《Java多线程编程实战指南》二
- python人脸识别程序如何嵌入到app_只用Python就能写安卓,简单几步实现人脸识别的App...
- 【会议】2008-10-27
- 高途发布2020年经德勤审计年报 CFO:16次做空已成谣言
- oracle进入到root用户,Linux环境中普通用户切换到root用户问题
- python小程序源代码_【程序源代码】Spring Boot 考试小程序
- IIS6上配置CGI有两个要点(转)
- Ubuntu 串口权限问题
- Leetcode 199.二叉树的右视图
- winform自定义用户控件
- 循环(概念、for循环、while循环 、do-while循环)
- vb常用内部函数(四):随机数函数
- 西门子PLC功能图的画法
- 洛谷OJ:P5960 【模板】差分约束算法
热门文章
- RealProxy AOP的实现
- ORA-01507: database not mounted
- GCD之线程挂起与恢复
- Memcached、MongoDB、Redis和tokyotyrant
- 解决asp.net 3.5sp1错误
- spark streaming性能优化
- (8)Verilog include 头文件使用路径(FPGA不积跬步101)
- (12)System Verilog 数组查找常数
- linux系统汇总的qt,QT 编程总结_Linux编程_Linux公社-Linux系统门户网站
- 结构pop_宏旺半导体总结嵌入式存储封装技术SiP、SOC、MCP、PoP的区别