P3393 逃离僵尸岛

2023-11-01 08:20
文章标签 僵尸 逃离 p3393

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

Portal.

建一个虚拟节点 0 0 0 号节点(一种很常用的思路),把这个点与所有被僵尸占领的点都连一条边权为 1 1 1 的边,跑一遍从 0 0 0 开始的 Dijkstra,对于一个点如果得到的 dis 数组值小于等于 S + 1 S+1 S+1,那么就是危险城市。

然后跑一遍 Dijkstra,如果到达点为危险城市,边权为 Q Q Q;如果到达点为起点或终点,边权为 0 0 0;如果到达点为僵尸占领的点时,边权为 + ∞ +\infty +

代码如下:

#include <bits/stdc++.h>
using namespace std;
#define int long longconst int maxn=600005;
int cnt,dis[maxn],a[maxn],b[maxn],head[maxn],nxt[maxn],to[maxn],w[maxn],N,M,K,S,c[maxn],P,Q;
bool danger[maxn],vis[maxn];void add(int x,int y,int z)
{to[++cnt]=y;w[cnt]=z;nxt[cnt]=head[x];head[x]=cnt;
}struct node
{int id,dis;friend bool operator < (node a,node b){return a.dis>b.dis;}
};priority_queue<node> q;void dij(int s)
{memset(vis,0,sizeof(vis));memset(dis,0x3f3f3f,sizeof(dis));dis[s]=0;q.push(node{s,0});while(!q.empty()){int u=q.top().id;q.pop();if(vis[u]) continue;vis[u]=1;for(int i=head[u];i;i=nxt[i])if(dis[to[i]]>dis[u]+w[i]&&!vis[to[i]])dis[to[i]]=dis[u]+w[i],q.push(node{to[i],dis[to[i]]});}
}signed main()
{cin>>N>>M>>K>>S;cin>>P>>Q;for(int i=1;i<=K;i++) cin>>c[i],add(0,c[i],1),add(c[i],0,1);for(int i=1;i<=M;i++) cin>>a[i]>>b[i],add(a[i],b[i],1),add(b[i],a[i],1);dij(0);for(int i=1;i<=N;i++) if(dis[i]<=S+1) danger[i]=1;cnt=0;for(int i=1;i<=M;i++) head[i]=0,nxt[i]=0,w[i]=0,vis[i]=0;for(int i=1;i<=K;i++) vis[c[i]]=1;int tmp;for(int i=1;i<=M;i++){if(vis[a[i]]||vis[b[i]]) continue;if(danger[b[i]]) tmp=Q;else tmp=P;add(a[i],b[i],tmp);if(danger[a[i]]) tmp=Q;else tmp=P;add(b[i],a[i],tmp);}dij(1);if(!danger[N]) cout<<dis[N]-P;else cout<<dis[N]-Q;return 0;
}

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



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

相关文章

Linux的进程,线程以及调度(fork与僵尸,内存泄漏,task结构体,停止状态与作业控制)

1.Linux进程生命周期(就绪、运行、睡眠、停止、僵死) 2.僵尸是个什么鬼? 3.停止状态与作业控制,cpulimit 4.内存泄漏的真实含义 5.task_struct以及task_

linux僵尸进程和孤儿进程

原文出处:http://www.cnblogs.com/Anker/p/3271773.html 孤儿进程与僵尸进程[总结] 1、前言   之前在看《unix环境高级编程》第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊。今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上面,没有深入,倍感惭愧。晚上回来google了一下,再次参考A

僵尸进程详细剖析

僵尸进程产生机理     在Unix 下的一些进程的运作方式。当一个进程死亡时,它并不是完全的消失了。进程终止,它不再运行,但是还有一些残留的小东西等待父进程收回。这些残留的东西包括 子进程的返回值和其他的一些东西。当父进程 fork() 一个子进程后,它必须用 wait() 或者 waitpid() 等待子进程退出。正是这个 wait() 动作来让子进程的残留物消失。

Mirai僵尸网络新漏洞:双刃剑效应下的DDoS攻防战

Mirai僵尸网络在全球DDoS攻击中占据了显著地位,特别是针对IoT设备和服务器发起攻击。最新动态显示,Mirai的命令与控制(C2)服务器被揭露出一个新安全缺口,这一漏洞既能助力攻击者策划DDoS攻击,也为安全专家提供了反制手段。Mirai僵尸网络的核心架构紧密依托于C2服务器,该服务器掌控着数千台受感染的僵尸主机。 研究专家“Jacob Masse”指出,DDoS攻击之所以得逞,根

僵尸进程的基础学习

1、概念         僵尸进程指的是处于僵尸态的进程,这种进程无法进行调度,但其所占用的系统资源并未被释放。僵尸态是进程生命周期的必经阶段,是无法避免的,但为了节约系统资源,应尽快清理腾出僵尸态进程所占用的内存资源。 2、产生的原因         当一个程序的代码流程从main函数返回后,进程就结束了,但此时不能立即退出,因为还需要向其父进程汇报执行的结果和死亡的原因,又因为已无法被调

手机游玩植物大战僵尸杂交版V2.3.7最新版教程(文章末尾免费直接下载链接)

手机游玩植物大战僵尸杂交版V2.3.7最新版教程 【V2.3.7全面升级】植物大战僵尸杂交版:跨平台终极安装指南 - 苹果、安卓、电脑、电视兼容,界面革新,16卡槽扩展,高分辨率支持,BUG修复,畅享游戏乐趣 前言 《植物大战僵尸杂交版2.3.7》游戏本次作为一次紧急修复更新的版本,作者潜艇伟伟迷对于游戏屏幕分辨率进行修复,提升了游戏植物卡槽的数量,让玩家们能够通过本次更新能够拥有更多的选择

【手机版+电脑版】最新版植物大战僵尸杂交版V2.3.7(文章末尾有下载链接)

【手机版+电脑版】最新版植物大战僵尸杂交版V2.3.7(文章末尾有下载链接) 前言 本最新安装下载保姆级:支持苹果,安卓☆电脑☆电视,游戏分辨率扩充,UI界面翻新,卡槽数量提升至16个,修复大量BUG嘎嘎好玩 话不多说直接下载链接 下载链接⬇️⬇️ 注意:防止链接失效,建议先保存到自己网盘 纯电脑版 注意:新用户使用【手机】保存官方会额外赠送1T空间 植物大战僵尸杂交版v2.3.7

Linux的进程详解(进程创建函数fork和vfork的区别,资源回收函数wait,进程的状态(孤儿进程,僵尸进程),加载进程函数popen)

目录 什么是进程  Linux下操作进程的相关命令 进程的状态(生老病死) 创建进程系统api介绍: fork() 父进程和子进程的区别 vfork() 进程的状态补充: 孤儿进程 僵尸进程 回收进程资源api介绍: wait() waitpid() exit() popen 什么是进程         一个程序是由源代码在编译后产生的,格式为ELF的,

聊聊 PHP 多进程模式下的孤儿进程和僵尸进程

在 PHP 的编程实践中多进程通常都是在 cli 脚本的模式下使用,我依稀还记得在多年以前为了实现从数据库导出千万级别的数据,第一次在 PHP 脚本中采用了多进程编程。在此之前我从未接触过多进程,只知道 PHP-FPM 进程管理器是多进程模型,但从未在编程中进行实践。多进程虽然能带来效率上的提升,但依然会带来不少的问题,如果初学者使用多进程,那注定会遇到各种奇奇怪怪的 Bug 比如并发操作数据库引

了解僵尸网络(BotNet):网络攻击的隐秘力量

在现代网络安全领域,**僵尸网络(BotNet)**是一个常常引起关注的词汇。这种恶意的网络结构被广泛用于各种网络攻击活动,从分布式拒绝服务攻击(DDoS)到大规模数据窃取,甚至是高级持续性威胁(APT)。僵尸网络的隐蔽性和破坏性使其成为网络安全威胁的头号敌人之一。 一、什么是僵尸网络(BotNet)? 僵尸网络(BotNet)是一种由大量被恶意软件感染的计算机(称为“僵尸”或“Bots”)组