题目链接 \(Click\) \(Here\)

分层图。。好长时间没写差点要忘了\(hhhhh\),其实思路还是很明了的。

注意需要强制消费。

#include <bits/stdc++.h>
using namespace std; const int N = 110010;
const int M = 550010;
#define int long long int n, k, A, B, C, have, val[110][110]; int node (int x, int y, int f) {
return (f - 1) * n * n + (x - 1) * n + y;
} bool in_map (int x, int y) {
return 1 <= x && x <= n && 1 <= y && y <= n;
} int cnt, head[N]; struct edge {
int nxt, to, w; edge (int _nxt = 0, int _to = 0, int _w = 0) {
nxt = _nxt, to = _to, w = _w;
}
}e[M]; void add_edge (int u, int v, int w) {
e[++cnt] = edge (head[u], v, w); head[u] = cnt;
} int dis[N]; struct Node {
int pos, dis;
bool operator < (Node rhs) const {return dis > rhs.dis;}
Node (int _pos = 0, int _dis = 0) {pos = _pos, dis = _dis;}
}; priority_queue <Node> q; int dijkstra (int s, int t) {
memset (dis, 0x3f, sizeof (dis));
dis[s] = 0; q.push (Node (s, 0));
while (!q.empty ()) {
Node u = q.top (); q.pop ();
if (dis[u.pos] < u.dis) continue;
for (int i = head[u.pos]; i; i = e[i].nxt) {
int v = e[i].to;
if (dis[v] > dis[u.pos] + e[i].w) {
dis[v] = dis[u.pos] + e[i].w;
q.push (Node (v, dis[v]));
}
}
}
return dis[t];
} signed main () {
cin >> n >> k >> A >> B >> C;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
cin >> have;
val[i][j] = have ? A : A + C;
}
}
int s = node (n, n, k + 1) + 1;
int t = node (n, n, k + 1) + 2;
add_edge (s, node (1, 1, 1), 0);
for (int i = 1; i <= k + 1; ++i) {
for (int x = 1; x <= n; ++x) {
for (int y = 1; y <= n; ++y) {
if (i <= k) {
if (i == 1 || val[x][y] != A) {
if (in_map (x + 1, y + 0)) add_edge (node (x, y, i), node (x + 1, y + 0, i + 1), 0);
if (in_map (x + 0, y + 1)) add_edge (node (x, y, i), node (x + 0, y + 1, i + 1), 0);
if (in_map (x - 1, y - 0)) add_edge (node (x, y, i), node (x - 1, y - 0, i + 1), B);
if (in_map (x - 0, y - 1)) add_edge (node (x, y, i), node (x - 0, y - 1, i + 1), B);
}
}
add_edge (node (x, y, i), node (x, y, 1), val[x][y]);
}
}
add_edge (node (n, n, i), t, 0);
}
cout << dijkstra (s, t) << endl;
}

Luogu P4009 汽车加油行驶问题的更多相关文章

  1. P4009 汽车加油行驶问题

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

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

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

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

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

  4. 洛谷P4009汽车加油行驶问题——网络流24题(最短路)

    题目:https://www.luogu.org/problemnew/show/P4009 网络流24题中不是网络流的最短路题: 把每个点拆成各个油量上的点,根据要求连边即可: 注意:点数最大为10 ...

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

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

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

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

  7. 【题解】【网络流24题】汽车加油行驶问题 [P4009] [Loj6223]

    [题解][网络流24题]汽车加油行驶问题 [P4009] [Loj6223] 传送门:汽车加油行驶问题 \([P4009]\) \([Loj6223]\) [题目描述] 给出一个 \(N \times ...

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

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

  9. 【刷题】LOJ 6223 「网络流 24 题」汽车加油行驶问题

    题目描述 给定一个 \(\text{N}\times \text{N}\) 的方形网格,设其左上角为起点◎,坐标为 \(\text{(1,1)}\) ,\(\text{X}\) 轴向右为正, \(\t ...

随机推荐

  1. Tuple Class

    Inheritance Hierarchy   System.Object  System.Tuple Methods   Name Description Create<T1>(T1) ...

  2. ASP.NET Web API Basic Identity 中的基本身份验证

    缺点 用户凭证在请求中发送. 凭据作为明文发送. 每个请求都会发送凭据. 无法注销,除非结束浏览器会话. 易于跨站点请求伪造(CSRF); 需要反CSRF措施. 优点 互联网标准. 受所有主要浏览器支 ...

  3. JarvisOJ Basic Base64?

    GUYDIMZVGQ2DMN3CGRQTONJXGM3TINLGG42DGMZXGM3TINLGGY4DGNBXGYZTGNLGGY3DGNBWMU3WI=== 题目非常具有迷惑性,我一开始以为就是一 ...

  4. 鼠标事件-MouseEvent

    当鼠标进行某种操作时,就会生成一个event对象,该对象记录着鼠标触发事件时的所有属性. 可以通过如下方法在google控制台打印出 MouseEvent 对象. function mouseDown ...

  5. 蒟阵P3390 【模板】矩阵快速幂

    代码如下: #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> ...

  6. 大学jsp实验七--JavaBean在JSP中的应用

    值bean的应用 (1)若有如下图所示的两个JSP页面,在第一个的页面的表单中填写相应内容,提交后再显示用户的提交信息.使用JavaBean的方式实现上述效果,请写出相应的代码. bean文件:Tes ...

  7. 【AGC014E】Blue and Red Tree 并查集 启发式合并

    题目描述 有一棵\(n\)个点的树,最开始所有边都是蓝边.每次你可以选择一条全是蓝边的路径,删掉其中一条,再把这两个端点之间连一条红边.再给你一棵树,这棵树的所有边都是红边,问你最终能不能把原来的树变 ...

  8. Hdoj 1905.Pseudoprime numbers 题解

    Problem Description Fermat's theorem states that for any prime number p and for any integer a > 1 ...

  9. Hdoj 1548.A strange lift 题解

    Problem Description There is a strange lift.The lift can stop can at every floor as you want, and th ...

  10. 【转】C++ const 关键字总结

    const是一个C++语言的限定符,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一 ...