洛谷P4009汽车加油行驶问题——网络流24题(最短路)
题目:https://www.luogu.org/problemnew/show/P4009
网络流24题中不是网络流的最短路题;
把每个点拆成各个油量上的点,根据要求连边即可;
注意:点数最大为100*100*11,因为虽然k<=10,但还有k=0的状态!(竟然因为边界调了一晚上)
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
typedef long long ll;
queue<int>q;
int const MAXN=,inf=1e9;//MAXN不可为100005
int n,k,a,b,c,nd[][][],cnt,ct=,head[MAXN];
int dis[MAXN];
bool vis[MAXN];
struct N{
int to,next,w;
N(int t=,int n=,int w=):to(t),next(n),w(w) {}
}edge[MAXN*];
void spfa()
{
memset(dis,,sizeof dis);
int s=nd[k][][];
dis[s]=;vis[s]=;q.push(s);
while(q.size())
{
int x=q.front();q.pop();vis[x]=;
// cout<<x<<endl;
for(int i=head[x];i;i=edge[i].next)
{
int u=edge[i].to;
if(dis[u]>dis[x]+edge[i].w)
{
// cout<<dis[x]<<endl;
dis[u]=dis[x]+edge[i].w;
if(!vis[u])vis[u]=,q.push(u);
}
}
// cout<<q.size()<<endl;
}
// cout<<"spfa"<<endl;
// ll mn=inf;
// for(int l=0;l<=k;l++)
// mn=min(mn,dis[nd[l][n][n]]);
printf("%d",dis[cnt+]);
}
int main()
{
scanf("%d%d%d%d%d",&n,&k,&a,&b,&c);//a加油 b返回 c建库
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
for(int l=;l<=k;l++)
nd[l][i][j]=++cnt;
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
bool d;
scanf("%d",&d);
if(!d)
{
edge[++ct]=N(nd[k][i][j],head[nd[][i][j]],a+c),head[nd[][i][j]]=ct;
for(int l=;l<=k;l++)
{
int x=nd[l][i][j];
if(i>)edge[++ct]=N(nd[l-][i-][j],head[x],b),head[x]=ct;
if(j>)edge[++ct]=N(nd[l-][i][j-],head[x],b),head[x]=ct;
if(i<n)edge[++ct]=N(nd[l-][i+][j],head[x],),head[x]=ct;
if(j<n)edge[++ct]=N(nd[l-][i][j+],head[x],),head[x]=ct;
// if(l<k)edge[++ct]=N(nd[k][i][j],head[x],a+c),head[x]=ct;//不优!
}
}
if(d)
{
int x=nd[k][i][j];
for(int l=;l<k;l++)
edge[++ct]=N(x,head[nd[l][i][j]],a),head[nd[l][i][j]]=ct;
if(i>)edge[++ct]=N(nd[k-][i-][j],head[x],b),head[x]=ct;
if(j>)edge[++ct]=N(nd[k-][i][j-],head[x],b),head[x]=ct;
if(i<n)edge[++ct]=N(nd[k-][i+][j],head[x],),head[x]=ct;
if(j<n)edge[++ct]=N(nd[k-][i][j+],head[x],),head[x]=ct;
}
}
for(int l=;l<=k;l++)
edge[++ct]=N(cnt+,head[nd[l][n][n]],),head[nd[l][n][n]]=ct;
// cout<<cnt<<endl;
spfa();
return ;
}
洛谷P4009汽车加油行驶问题——网络流24题(最短路)的更多相关文章
- 洛谷 P4009 汽车加油行驶问题 解题报告
P4009 汽车加油行驶问题 题目描述 给定一个\(N×N\)的方形网格,设其左上角为起点◎,坐标(1,1) ,\(X\)轴向右为正,\(Y\)轴向下为正,每个方格边长为1 ,如图所示. 一辆汽车从起 ...
- 洛谷P4009 汽车加油行驶问题(分层最短路)
传送门 说好的网络流24题呢……上次是状压dp,这次怎么又最短路了…… 不过倒是用这题好好学了一下分层图最短路 把每一个位置$(x,y)$,油量剩余$k$表示为一个状态,然后转化成一个$n$进制数,这 ...
- 洛谷P4009 汽车加油行驶问题
题目描述 给定一个 N \times NN×N 的方形网格,设其左上角为起点◎,坐标(1,1)(1,1),XX 轴向右为正, YY 轴向下为正,每个方格边长为 11 ,如图所示. 一辆汽车从起点◎出发 ...
- 洛谷 P4009 汽车加油行驶问题 【最小费用最大流】
分层图,建k层,设(i,j,0)为点(i,j)的满油状态,全图的流量都是1,因为重复走到一个点没有意义.如果当前点是加油站,那么它向它上左的点连费用为a的边,向下右连费用为a+b的边: 否则,这个点的 ...
- 洛谷 P2763 试题库问题(网络流24题之一)
题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法. ...
- 洛谷-p2764(最小路径覆盖)(网络流24题)
#include<iostream> #include<algorithm> #include<queue> #include<cstring> #in ...
- P4009 汽车加油行驶问题
P4009 汽车加油行驶问题 最短路 清一色的spfa....送上一个堆优化Dijkstra吧(貌似代码还挺短) 顺便说一句,堆优化Dj跑分层图灰常好写 #include<iostream> ...
- 【网络流24题】 No.15 汽车加油行驶问题 (分层图最短路i)
[题意] 问题描述:给定一个 N*N 的方形网格,设其左上角为起点◎, 坐标为( 1, 1), X 轴向右为正, Y轴向下为正, 每个方格边长为 1, 如图所示. 一辆汽车从起点◎出发驶向右下角终点▲ ...
- Luogu P4009 汽车加油行驶问题
题目链接 \(Click\) \(Here\) 分层图..好长时间没写差点要忘了\(hhhhh\),其实思路还是很明了的. 注意需要强制消费. #include <bits/stdc++.h&g ...
随机推荐
- linux下的环境文件设置说明
工作环境设置文件 环境设置文件有两种:系统环境设置文件 和 个人环境设置文件 1.系统中的用户工作环境设置文件: 登录环境设置文件:/etc/profile 非登录环境设置文件: ...
- VueJS样式绑定:v-bind
HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...
- Android开发之实现锁屏功能
锁屏须要引入设备超级管理员.在文档Android开发文档的Administration中有具体的说明. Android设备管理系统功能和控制訪问. 主要有一下几个步骤: 1 创建广播接收者,实现De ...
- pandas-数据分析
pandas是一个强大的python数据分析的工具包 pandas是基于numpy构建的 pandas的主要功能: 具备对其功能的数据结构DataFrame.Series 集成世间序列功能 提供丰富的 ...
- adb tcp 调试
su setprop service.adb.tcp.port 5555 stop adbd start adbd
- js json按key值排序
最近有个需求需要把json按key值进行排序,可是js并没有直接的函数可以对json进行排序的这么办呢? 然后想到了一个间接的方法来实现: 1.将json中的key值取出,存在一个数组中,然后对这个数 ...
- OpenCV 入门示例之一:显示图像
前言 本文展示一个显示图像的示例程序,它用于从硬盘加载一副图像并在屏幕上显示. 代码示例 // 此头文件包含图像IO函数的声明 #include "highgui.h" int m ...
- Nmap扫描教程之基础扫描具体解释
Nmap扫描教程之基础扫描具体解释 Nmap扫描基础扫描 当用户对Nmap工具了解后,就可以使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具能够分别对主机.port.版本号.操作系统等实施扫 ...
- superslider网站特效插件
网站上常用的“焦点图/幻灯片”“Tab标签切换”“图片滚动”“无缝滚动” 如何使用 1.引入jquery.js 引入superslider.js 2.编写HTML 以下是默认的HTMl结构,分别 ...
- requests 中文乱码
jsUrl = 'http://www.heze.cn/qiye/index.php?a=userinfo&username={}'.format(bizQiyeId)r = requests ...