P3393 逃离僵尸岛 最短路dijkstra

  

题目描述

小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家。

该国有N个城市,城市之间有道路相连。一共有M条双向道路。保证没有自环和重边。

K个城市已经被僵尸控制了,如果贸然闯入就会被感染TAT...所以不能进入。由其中任意城市经过不超过S条道路就可以到达的别的城市,就是危险城市。换句话说只要某个没有被占城市到某个被占城市不超过s距离,就是危险。

小a住在1号城市,国际空港在N号城市,这两座城市没有被侵略。小a走每一段道路(从一个城市直接到达另外一个城市)得花一整个白天,所以晚上要住旅店。安全的的城市旅馆比较便宜要P元,而被危险的城市,旅馆要进行安保措施,所以会变贵,为Q元。所有危险的城市的住宿价格一样,安全的城市也是。在1号城市和N城市,不需要住店。

小a比较抠门,所以他希望知道从1号城市到N号城市所需要的最小花费。

输入数据保证存在路径,可以成功逃离。输入数据保证他可以逃离成功。

输入输出格式

输入格式:

 

第一行4个整数(N,M,K,S)

第二行2个整数(P,Q)

接下来K行,ci,表示僵尸侵占的城市

接下来M行,ai,bi,表示一条无向边

 

输出格式:

 

一个整数表示最低花费

 

输入输出样例

输入样例#1: 复制
13 21 1 1
1000 6000
7
1 2
3 7
2 4
5 8
8 9
2 5
3 4
4 7
9 10
10 11
5 9
7 12
3 6
4 5
1 3
11 12
6 7
8 11
6 13
7 8
12 13
输出样例#1: 复制
11000

说明

对于20%数据,N<=50

对于100%数据,2 ≦ N ≦ 100000, 1 ≦ M ≦ 200000, 0 ≦ K ≦ N - 2, 0 ≦ S ≦ 100000

1 ≦ P < Q ≦ 100000

 

先用bfs求出危险的点

 

然后其实就是裸的最短路  只不过是点权最短路

点权最短路的求法:边权看作其两个端点权之和  结果div2即可

 

注意染色会被覆盖!

#include<bits/stdc++.h>
using namespace std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define RI(n) scanf("%d",&(n))
#define RII(n,m) scanf("%d%d",&n,&m)
#define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define RS(s) scanf("%s",s);
#define ll long long
#define pb push_back
#define REP(i,N)  for(int i=0;i<(N);i++)
#define CLR(A,v)  memset(A,v,sizeof A)
//
#define inf 0x3f3f3f3f3f3f
const int N=1e6;
const int M=4e7+54;
int n,m,k,s,Q,P,x;ll mp[N],dis[N];int vis[N],unsafe[N];
int head[M],pos;
struct Edge
{int nex,to;
}edge[M];
void add(int a,int b)
{edge[++pos].nex=head[a];head[a]=pos;edge[pos].to=b;
}
struct Node
{ll d,id;bool operator<(Node b)const{return d>b.d;}
};
struct bf
{int x,d;
};
void bfs(int x)
{queue<bf>q;CLR(vis,0);vis[x]=1;q.push(bf{x,0});while(!q.empty()){bf u=q.front();q.pop();if(u.d>s)continue;if(u.d==0)mp[u.x]=inf;else mp[u.x]=Q;for(int i=head[u.x];i;i=edge[i].nex){int v=edge[i].to;if(vis[v])continue;vis[v]=1;q.push(bf{v,u.d+1});}}
}
void dijkstra(int s)
{rep(i,1,n)dis[i]=inf;dis[s]=0;CLR(vis,0);priority_queue<Node>q;q.push(Node{0,s});while(!q.empty()){Node u=q.top();q.pop();if(vis[u.id])continue;vis[u.id]=1;for(int i = head[u.id];i;i=edge[i].nex){int v=edge[i].to;if(dis[v]>u.d+mp[u.id]+mp[v]){dis[v]=u.d+mp[u.id]+mp[v];q.push(Node{dis[v],v});}}}
}
int main()
{RII(n,m);RII(k,s);RII(P,Q);rep(i,1,k){RI(x);unsafe[x]=1;}rep(i,1,n)mp[i]=P;while(m--){ int a,b;RII(a,b);add(a,b);add(b,a);}rep(i,1,n)if(unsafe[i])bfs(i);rep(i,1,n)if(unsafe[i])mp[i]=inf;mp[1]=0;mp[n]=0;dijkstra(1);cout<<dis[n]/2;return 0;
}
View Code

 

转载于:https://www.cnblogs.com/bxd123/p/10937386.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/362555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery 给iframe里的元素添加事件

$("#iframeId").on("load", function(event){//判断 iframe是否加载完成 这一步很重要$("#divId",this.contentDocument).click(function(){//添加点击事件alert("就是这样");}); });更多专业前端知识&#xff0c;请上 【猿2048】www…

JavaFX技巧7:使用CSS颜色常量/派生颜色

在使用FlexCalendarFX时&#xff0c;我不得不定义一组颜色以可视化不同颜色的不同日历的控件。 每个日历不仅提供一种颜色&#xff0c;还提供几种&#xff1a;用于取消选择/选定/悬停状态的背景和文本颜色。 颜色曾在多个地方使用过&#xff0c;但为了简洁起见&#xff0c;我仅…

spring step 1 : 什么是spring

学习一门技术之前还是花点时间来看看这门技术的特点&#xff0c;我们通过使用这种技术能够达到什么效果。 1.spring是什么&#xff1f; 2.spring能够干什么&#xff1f; 3.为什么使用spring&#xff1f; 1.spring是一个开源的框架&#xff0c;主要是由IoC&#xff0c;AOP&#…

文字溢出显示三个点

1、单行溢出 text-overflow: ellipsis; overflow: hidden; white-space: nowrap; width: 90%; 2、多行溢出 overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; 转载于:https://www.cnblogs.co…

import() 动态加载component组件失败

在写 vueelement 从后台获取数据写导航栏 时&#xff0c;当我加载动态路由&#xff0c;import() 总是失败。 假设 path: “/views/Home.vue”&#xff0c;name: “Home”。 一、使用 import() 语法加载组件 参考&#xff1a;“Cookysurongbin”的 解决vue动态路由异步加载im…

JPA /休眠刷新策略初学者指南

介绍 在我之前的文章中&#xff0c;我介绍了实体状态转换 对象关系映射范例。 当刷新当前持久性上下文时&#xff0c;所有管理实体状态转换都将转换为关联的数据库语句。 Hibernate的刷新行为并不总是像人们想象的那么明显。 后写 Hibernate尝试将持久性上下文刷新推迟到最后…

进入登录页时,用户名输入框自动聚焦、按enter键让密码框聚焦,完整输入信息后登录

让element-ui的输入框聚焦的4种方式 思路&#xff1a;&#xff08;可以跳过这一步看完整代码——完整代码&#xff09; 1. 进入页面时&#xff0c;用户名输入框就要获取焦点&#xff0c;使用 自定义指令 聚焦更方便。当然也可以用 ref 在 mounted() 钩子函数中让输入框聚焦。 …

JS的对象及其属性和方法

在JavaScript中是基于对象的编程&#xff0c;而不是完全的面向对象的编程。       那麽什麽是对象呢&#xff1f;如果你学过一些VB的编程&#xff0c;对这个名词一定不会陌生。通俗的说&#xff0c;对象是变量的集合体&#xff0c;对象提供对于数据的一致的组织手段&…

vue-cli安装步骤

vue-cli脚手架模板是基于node下的npm来完成安装的所以首先需要安装node 条件&#xff1a; node在4.以上&#xff0c;npm在3以上 安装 指令&#xff1a; 1、 npm install -g vue-cli在全局下安装vue-cli # 安装 vue-cli npm install -g vue-cli# 初始化 webpack 项目 vue in…

# reverse swap

目录&#xff1a; swap&#xff08;数字、字符串、&#xff09;reverseStringreverseWordsswap /** 借助临时变量 */ function swap(str1, str2) {const temp str1;str1 str2;str2 temp; } /** 解构赋值 */ [a, b] [b, a];/** 对象 */ {a,b} {a:b,b:a} /** 加法 只适用于…

使用Java编写简单的老虎机游戏

无论游戏多么简单或复杂 &#xff0c;Java都能胜任&#xff01; 在这篇文章中&#xff0c;让我们看一下Java编程的初学者如何制作一个简单而功能齐全的老虎机。 老虎机已经存在很长时间了&#xff0c;但是它的娱乐价值似乎并没有减弱。 InterCasino是第一个在1996年向世界提供…

类似flashget的浮动窗口的实现

作者&#xff1a;苍竹先生下载源代码一、简介&#xff1a;象flashget、迅雷、BT等都有浮动窗口&#xff0c;能详细地显示下载的详细信息&#xff0c;该类型的窗口有一下几个特点&#xff1a;1、窗口无标题栏&#xff0c;窗口的大小跟位图一样大。2、前端显示。3、在客户区内按下…

html笔记(二)html4+css2.0(元素类型、css精灵、宽度自适应、BFC、浏览器相关概述、css统筹)

大标题小节一、元素类型1. 元素分类2. 置换和非置换元素3. 元素类型转换二、css精灵三、宽高自适应1. 宽度自适应2. 高度自适应3. 最小高度自适应4. 高度塌陷及解决办法5. 元素的高度自适应屏幕的高度四、BEC概念应用1. 常见定位方案2. 触发BFC3. BFC特性及应用4. BFC概念五、浏…

25.C# 异步调用Web服务

1.创建Web服务 1.1VS新建ASP.Net空Web应用程序 1.2添加Web服务新建项 1.3添加GetWeather方法和相关类 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.EnterpriseServices;namespace WebServ…

css中单位的使用

css中许多的属性都需要添加长度&#xff0c;而长度一般由数字和单位构成&#xff0c;如1px,1.5em,2vh&#xff1b;也可以省略单位&#xff0c;如line-height:1.5,表示行高为字体大小的1.5倍&#xff1b; 长度单位一般也分为相对长度和绝对长度。 &#xff08;一&#xff09;绝…

Office开发程序集版本及部署问题

Office 开发遇到了OFFICE 2003和OFFICE 2007程序集兼容性的问题&#xff0c;使用OFFICE 11.DLL只能适应OFFICE 2003,Office 12.dll 能够兼容Office 2003和Office 2007。 以前部署时&#xff0c;是建议客户安装Office 2003。 今天看到《开发Office的一些应用部署后出现找不到程序…

OSGi:进入微服务架构的门户

在构建可扩展&#xff0c;可靠的分布式系统的背景下&#xff0c;“模块化”和“微服务体系结构”这两个术语如今经常出现。 众所周知&#xff0c;Java平台本身在模块化方面很弱&#xff08; Java 9将通过交付Jigsaw项目来解决这一问题&#xff09;&#xff0c;从而为OSGi和JBos…

新闻实时分析系统-Kafka分布式集群部署

Kafka是由LinkedIn开发的一个分布式的消息系统&#xff0c;使用Scala编写&#xff0c;它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark都支持与Kafka集成。 1.下载Kafka并安装 1&#xff09;下载Apache版本的Kafka。 …

html笔记(五)2D、3D、3D动画

大标题小节一、2D1. css3 渐变的语法及应用2. 动画过渡&#xff1a;transition3. 2D转换属性&#xff1a;transform二、3D1. 3D转换2. 3D视距3. 3D翻转方法4. 3D位置移动5. 3D缩放三、3D动画1. keyframes2. 动画属性animation一、2D 1. css3 渐变的语法及应用&#xff1b; &a…

微信内置浏览器点击“返回”关闭窗口

场景&#xff1a;开发微信内的H5活动&#xff0c;需要进行微信授权&#xff0c;我们采用的是在一个静态页面&#xff08;只有js&#xff0c;所以是个空白页面&#xff09;内进行授权&#xff0c;授权后再跳转到活动主页。 客户需求&#xff1a;从活动主页返回时不显示这个授权…