题目: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题(最短路)的更多相关文章

  1. 洛谷 P4009 汽车加油行驶问题 解题报告

    P4009 汽车加油行驶问题 题目描述 给定一个\(N×N\)的方形网格,设其左上角为起点◎,坐标(1,1) ,\(X\)轴向右为正,\(Y\)轴向下为正,每个方格边长为1 ,如图所示. 一辆汽车从起 ...

  2. 洛谷P4009 汽车加油行驶问题(分层最短路)

    传送门 说好的网络流24题呢……上次是状压dp,这次怎么又最短路了…… 不过倒是用这题好好学了一下分层图最短路 把每一个位置$(x,y)$,油量剩余$k$表示为一个状态,然后转化成一个$n$进制数,这 ...

  3. 洛谷P4009 汽车加油行驶问题

    题目描述 给定一个 N \times NN×N 的方形网格,设其左上角为起点◎,坐标(1,1)(1,1),XX 轴向右为正, YY 轴向下为正,每个方格边长为 11 ,如图所示. 一辆汽车从起点◎出发 ...

  4. 洛谷 P4009 汽车加油行驶问题 【最小费用最大流】

    分层图,建k层,设(i,j,0)为点(i,j)的满油状态,全图的流量都是1,因为重复走到一个点没有意义.如果当前点是加油站,那么它向它上左的点连费用为a的边,向下右连费用为a+b的边: 否则,这个点的 ...

  5. 洛谷 P2763 试题库问题(网络流24题之一)

    题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法. ...

  6. 洛谷-p2764(最小路径覆盖)(网络流24题)

    #include<iostream> #include<algorithm> #include<queue> #include<cstring> #in ...

  7. P4009 汽车加油行驶问题

    P4009 汽车加油行驶问题 最短路 清一色的spfa....送上一个堆优化Dijkstra吧(貌似代码还挺短) 顺便说一句,堆优化Dj跑分层图灰常好写 #include<iostream> ...

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

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

  9. Luogu P4009 汽车加油行驶问题

    题目链接 \(Click\) \(Here\) 分层图..好长时间没写差点要忘了\(hhhhh\),其实思路还是很明了的. 注意需要强制消费. #include <bits/stdc++.h&g ...

随机推荐

  1. Android Studio 设置项目Module编码,解决Android Studio项目执行时乱码问题

    Android Studio的项目设置逻辑与Eclipse有非常大的差别.运行的操作为File->Setting->File Encodings然后来进行设置,如图所看到的: waterm ...

  2. [Algorithms] Tree Data Structure in JavaScript

    In a tree, nodes have a single parent node and may have many children nodes. They never have more th ...

  3. python3 查看已安装的模块

    一.命令行下使用pydoc命令 在命令行下运行$ pydoc modules即可查看 二.在python交互解释器中使用help()查看 在交互式解释器中输入>>> help(&qu ...

  4. byte 单位换算

    1G就1GB啦,平时人们说1G只是简洁来说而已. bit(位).B(字节).K(千).M(兆).G(吉咖).T(太拉) B(Byte).KB(KiloByte).MB(MegaByte).GB(Gig ...

  5. Android--绑定服务调用服务的方法

    Service依照其启动的方式,可分为两种: 1.Started Started的Service.通过在Application里用startService(Intent intent)方法来启动.这样 ...

  6. Kick the ball!(dfs)湖南省赛第十届

    Problem K: Kick the ball! Time Limit: 1 Sec  Memory Limit: 128 MB  Special Judge Submit: 109  Solved ...

  7. window 平台搭建简单的直播点播系统

    Windows平台如何搭建简单的直播系统前文已经有介绍,今天介绍下如何搭建简单的点播系统. 同样还是利用crtmpServer,crtmpServer可以从github中下载,可以从群里下载(群里有修 ...

  8. ubuntu14.04下CPU的caffe配置,不成功的朋友请与我(lee)联系,后面附带邮箱

    因广大朋友需求cpu的caffe配置.所以我(lee)在这份博客中对cpu配置caffe做出对应操作说明.希望能够解决大家对cpu配置caffe的困惑.少走弯路. 假设有安装不成功的朋友能够和我联系, ...

  9. 获取当前外网IP地址

    <script src="http://pv.sohu.com/cityjson?ie=utf-8"></script><script>cons ...

  10. eclipse的debug使用(转载)

    出处:http://www.blogjava.net/yxhxj2006/archive/2012/08/30/386621.html 远程Debug: http://blog.sina.com.cn ...