题目: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. C 标准库 - <locale.h>

    C 标准库 - <locale.h> 简介 locale.h 头文件定义了特定地域的设置,比如日期格式和货币符号.接下来我们将介绍一些宏,以及一个重要的结构 struct lconv 和两 ...

  2. spring security开发步骤

    1.web.xml中加载spring ,spring security 2.spring security配置文件中配置好.... 3.自己写一个myFilter代替原有的FilterSecurity ...

  3. 面试之SQL(1)--选出选课数量&gt;=2的学号

    ID      Course 1 AA 1 BB 2 AA 2 BB 2 CC 3 AA 3 BB 3 CC 3 DD 4 AA NULL NULL 选出选课数量>=2的学号 select di ...

  4. 命令+mybatis-generator插件自己主动生成Mapper映射文件

    学mybatis的时候,自己写各种 *Mapper.xml和 *Mapper.java,注意各种sql语句中的 id 是否匹配.xml中的namespace是否正确,非常麻烦有木有?今天博客内容就是高 ...

  5. vs2010音频文件压缩 调用lame_enc.dll将WAV格式转换成MP3

    /* //My_lame.h */ #pragma once#include "stdafx.h"#include <windows.h>#include <st ...

  6. React Native 学习(三)之 FlexBox 布局

    React Native 学习(三)之 FlexBox 布局

  7. iOS9新特性之泛型

     iOS9新特性之泛型 作用:限制类型 好处:1.提高开发规范,减少程序员之间的交流 2.通过集合取出来的对象,直接当作泛型对象使用,可以直接使用点语法(id类型不能使用点语法) 使用场景: 1.在集 ...

  8. 【BZOJ3505】[Cqoi2014]数三角形 组合数

    [BZOJ3505][Cqoi2014]数三角形 Description 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个.下图为4x4的网格上的一个三角形. 注意三角形的三点不能共线. ...

  9. Spring mvc接受集合类型参数的方法

    public String xxxxx(String xxxx, String xxxxx, @RequestParam("parameterList[]") List<St ...

  10. spring mvc 设置设置默认首页的方式

    背景: 项目使用springmvc管理请求,有一个小的需求,输入域名的时候自动进入某个页面(或者说自动发起某个请求). 过程: 1,首先想到 在web.xml中配置welcome-file-list的 ...