P3393 逃离僵尸岛 bfs +最短路

2024-03-27 01:04
文章标签 bfs 短路 僵尸 逃离 p3393

本文主要是介绍P3393 逃离僵尸岛 bfs +最短路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

P3393 逃离僵尸岛 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:bfs处理出高收费城市,将价格作为点权,将点权当作边权跑最短路。由于到达 v v v,且 v v v不是终点,那么还要再走这个时候需要在该点休息,但是如果是终点就不用再休息,可以将终点点权为0。

易错点:

  • long long
  • bfs没用设置vis数组(脑子糊涂了,想着不全部遍历一遍可能有遗漏,却忘了bfs的性质,第一次到该点就是最小步数(后来者不能居上
  • 注意点权的设置:已经被僵尸控制的城市是不能到达的,危险城市是 Q Q Q,普通城市是 P P P,终点是0。
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const int N = 4e5 + 21;
struct no {int u;LL d;bool operator<(const no& rhs) const {return d > rhs.d;}
};
int e[N], ne[N], h[N], idx,w[N],vis[N];
LL dis[N];
void add(int u, int v) {e[idx] = v, ne[idx] = h[u], h[u] = idx++;
}
int main()
{int n,m,K,S; cin>>n>>m>>K>>S;int P,Q; cin>>P>>Q;queue<no> q;for(int i = 0, x; i < K; ++i) {cin>>x;vis[x] = 1;w[x] = -1;q.push({x, 0});}memset(h, -1, sizeof(h));for(int i = 0; i < m; ++i) {int u,v; cin>>u>>v;add(u,v), add(v, u);}// bfswhile(q.size()) {auto tmp = q.front(); q.pop();int u = tmp.u, d = tmp.d;if(d > S) continue;for(int i = h[u]; ~i; i = ne[i]) {int y = e[i];if(vis[y]) continue;if(d + 1 <= S) {vis[y] = 1;q.push({y, d + 1});}}}// 设置点权for(int i = 1; i <= n; ++i) {if(w[i] == -1) continue;w[i] = vis[i] ? Q : P;}for(int i = 1; i <= n; ++i) {dis[i] = 1e18;vis[i] = 0;}dis[1] = 0;w[n] = 0;// dijkstrapriority_queue<no> heap;heap.push({1, 0});while(heap.size()) {auto tmp = heap.top(); heap.pop();int u = tmp.u, d = tmp.d;if(vis[u]) continue;vis[u] = 1;for(int i = h[u]; ~i; i = ne[i]) {int y = e[i];if(w[y] == -1) continue;if(dis[y] > dis[u] + w[y]) {dis[y] = dis[u] + w[y];heap.push({y, dis[y]});}}}cout<<dis[n];
}

这篇关于P3393 逃离僵尸岛 bfs +最短路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/850447

相关文章

多源 BFS

例题一 解法(bfs)(多个源头的最短路问题) 算法思路: 对于求的最终结果,我们有两种⽅式: • 第⼀种⽅式:从每⼀个 1 开始,然后通过层序遍历找到离它最近的 0 。 这⼀种⽅式,我们会以所有的 1 起点,来⼀次层序遍历,势必会遍历到很多重复的点。并且如果 矩阵中只有⼀个 0 的话,每⼀次层序遍历都要遍历很多层,时间复

潜艇伟伟迷杂交版植物大战僵尸2024最新免费安卓+ios苹果+iPad分享

嗨,亲爱的游戏迷们!今天我要给你们种草一个超有趣的游戏——植物大战僵尸杂交版。这款游戏不仅继承了原有经典游戏的核心玩法,还加入了许多创新元素,让玩家能够体验到前所未有的乐趣。快来跟随我一起探索这个神奇的世界吧! 植物大战僵尸杂交版最新绿色版下载链接: https://pan.quark.cn/s/d60ed6e4791c 🔥 创新与经典的完美结合 植物大战僵尸杂交版在保持了原游戏经典玩

植物大战僵尸杂交版2.1版本终于来啦!游戏完全免费

在这个喧嚣的城市里,我找到了一片神奇的绿色世界——植物大战僵尸杂交版。它不仅是一款游戏,更像是一扇打开自然奥秘的窗户,让我重新认识了植物和自然的力量。 植物大战僵尸杂交版最新绿色版下载链接: https://pan.quark.cn/s/d60ed6e4791c 🌱 🔥 激情介绍:不只是游戏,更是生态课 植物大战僵尸杂交版将经典的策略塔防游戏带入了一个全新的维度。这里,每一种植物都拥

BFS:解决多源最短路问题

文章目录 什么是多源最短路问题?1.矩阵2.飞地的数量3.地图的最高点4.地图分析总结 什么是多源最短路问题? 多源最短路问题(Multi-Source Shortest Path Problem,MSSP)是图论中的一个经典问题,它的目标是在给定图中找到从多个源点到所有其他顶点的最短路径。这个问题可以视为单源最短路问题(Single-Source Shortest Pa

最短路算法总结(dijkstra,flyod,bellmanford,spfa)

总结 d i j k s t r a dijkstra dijkstra h e a p − d i j k s t r a heap-dijkstra heap−dijkstra b e l l m a n f o r d bellmanford bellmanford s p f a spfa spfa f l o y d floyd floyd最短路类型单源单源单源单源全源数据维护 e

[AIGC] 宽度优先搜索(BFS) 讲解以及在 LeetCode 题中的应用

宽度优先搜索(Breadth-First Search,简称 BFS)是一种用于图或树结构的遍历算法。它以广度方向进行搜索,首先访问根节点,然后访问所有相邻的节点,然后再通过它们的邻居一直进行下去,直到所有的节点都被访问过。 文章目录 BFS 的工作过程BFS 在 LeetCode 中的应用 BFS 的工作过程 BFS 从图的某一节点(称为“源”节点)开始,访问可能

BFS 解决最短路问题

例题一 解法(bfs 求最短路): 算法思路: 利⽤层序遍历来解决迷宫问题,是最经典的做法。我们可以从起点开始层序遍历,并且在遍历的过程中记录当前遍历的层数。这样就能在找到出⼝的时候,得到起点到出⼝的最短距离。 例题二 解法: 算法思路: 如果将「每次字符串的变换」抽象成图中的「两个顶点和⼀条边」的话,问题就变成了「边权为

BFS【2】迷宫

目录 迷宫 走到右下角最短路径长度 走到右下角最短路径 跨步迷宫   迷宫 走到右下角最短路径长度 我是和上一篇一样,创建一个队列,不过while 里面判责是queue非空,否则会死循环万一是死路的话。 也是要判断不要重复入队。 #include <iostream>#include <vector>#include <cmath>#include <string>

逃离北京回家创业--生存篇

创业的路上,并不总是激情和乐趣。当激情过了,就需要面对赤裸裸的现实。 首先要考虑团队的开销问题,虽然大家拿的工资并不高,但是四个人的工资加上房租水电,对于一个穷苦出身的程序员来说也是个不小的压力。为了给团队找个能够发展下去的持续动力,我想了挺多的办法。 我们在大学城里面创业,大学生是很好的资源。我首先想到的是办培训,我反复思考,我觉得想到了一个非常理想的运作模式。我们创业缺少的是两

逃离北京回家创业--团队组建篇

筹划好了自己的创业项目,然后就开始着手组建团队了。考虑到自己没有太多的资金支持,不能可能去社会上招经验丰富的员工,于是决定自己培养团队。 好在我技术选择的是nodejs和mongodb,前后端都用js开发起来学习成本相对较低。我选择办公地点在大学城,一方面是考虑到这里的房租相对便宜,另一方面这里周边有十几所大学,组建团队也比较方便。大学生虽然不像社会上招的熟练技术人员效率那么高,但是我坚信大学生