系统警告,Bronya请求支援

Description

休伯利安号的一行人来到了由逆熵镇守的前文明遗迹[海渊城],他们准备用巨大的传送装置[海渊之眼]进入量子之海,寻找丢失的渴望宝石。然而在行动前夜爱因斯坦却遭到神秘人的袭击,下落不明,而海渊之眼也发生了原因不明的暴走。为了找回渴望宝石,布洛妮娅在一片混乱中,只身一人跳入了量子之海。布洛妮娅在经受认知回廊的考验之后,得到了逆熵盟主瓦尔特的帮助,并拿到了理之律者核心,然而就在这时,布洛妮娅接收到强烈的崩坏能警报,数据显示渴望宝石受到理之律者核心的激发变得极不稳定,会在x秒后爆发出强烈的崩坏能脉冲,布洛妮娅已经没有时间了,必须马上出发,“ 重装小兔19C,ride on!”。

量子之海由n个地点组成,编号1−n1 - n1−n,这些地点由mmm条双向道路连接,保证任意两个地点连通,在t=0t=0t=0时刻布洛妮娅在111号地点,渴望宝石在量子之海的最深处nnn号地点。布洛妮娅从一个地点沿着一条道路到达另一个地点需要111秒时间(当然布洛妮娅可以选择不移动),渴望宝石会在t=xt=xt=x时刻爆发,爆发只会持续一瞬间,但布洛妮娅无法承受如此强烈的崩坏能爆发,幸运的是在量子之海中有kkk个地点是安全的,能够躲避崩坏能的侵蚀,也就是说t=xt=xt=x时刻布洛妮娅必须待在其中一个安全地点里,等待爆发过后才能继续前往nnn号地点取回渴望宝石。(如果布洛妮娅能够在t≤xt \leq xt≤x时取回渴望宝石,就不会爆发)布洛妮娅必须尽快完成任务,但是她的生物芯片被烧毁了,无法计算出最少需要花费多少时间,因此她向舰长您请求帮助,请告诉布洛妮娅她最少需要花费多少时间才能取回渴望宝石。

Input

第一行三个整数n,m,xn,m,xn,m,x表示地点的数量,道路的数量,爆发的时间

接下来mmm行,每行两个整数a,ba,ba,b,表示aaa和bbb之间有一条双向道路连接。

接下来一行一个整数kkk,表示安全地点的数量

接着kkk行,每行一个整数kik_iki​,表示kik_iki​是安全地点

2≤n≤1e5, n−1≤m≤1e5,0≤x≤100,0≤k≤100,1≤ki ≤n2 \leq n \leq 1e5,  n-1 \leq m \leq1e5, 0 \leq x \leq 100,0 \leq k \leq 100,1 \leq k_i  \leq n2≤n≤1e5, n−1≤m≤1e5,0≤x≤100,0≤k≤100,1≤ki​ ≤n;

Output

如果布洛妮娅能够取回渴望宝石,输出最少需要花费多少时间,否则输出" -1 "。

//真的很想在output里面加中文,但好像判题机不允许   (´-ωก`)。

Sample Input 1

4 4 0
1 2
1 3
2 4
3 4
1
2

Sample Output 1

-1

Sample Input 2

4 4 1
1 2
1 3
2 4
3 4
1
2

Sample Output 2

2

Sample Input 3

4 4 5

1 2

1 3

2 4

3 4

1

2

Sample Output 3

2

Hint

对于第一个样例,布洛妮娅无法在爆发前到达安全地点,因此任务失败。

对于第二个样例,布洛妮娅在t=1t=1t=1时必须待在222号地点躲避崩坏能爆发。

对于第三个样例,布洛妮娅可以在x秒内取回渴望宝石,因此崩坏能不会爆发,答案是222s。

Source

休伯利安号退伍舰长Chter 指挥官编号:19470572

思路

分别以起点s、终点e 跑一遍最短路,首先看能否在规定时间内从s 到 e点,如果能到话直接输出时间,否则要现到躲避处,躲避t 秒,之后在从躲避点到达e点(这个路程所话多时间正用上了我们 终点e起点逆向跑最短路的这个过程)

代码

#include<iostream>
#include<queue>
#include<cstdio>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<string>
#include<vector>
#include<map>
#include<algorithm>
using namespace std; const int Len = 1e6;
const int INF = 1e9 + 10;
struct Edge
{
int v, w, next;
} edge[Len];
int head[2*Len];
int k = 0;
int n,m,t;
int pos[Len]; void Add(int u, int v, int w)
{
edge[++ k] = (Edge){ v, w, head[u]};
head[u] = k;
} void init()
{
k = 0;
} int dis1[Len], dis2[Len]; void Spfa(int s, int dis[])
{
int use[Len] = {0};
for(int i = 1; i <= n; i ++)
dis[i] = INF;
dis[s] = 0;
queue<int> q;
q.push(s);
int u,v;
while(! q.empty())
{
u = q.front(); q.pop();
use[u] = 0; for(int i = head[u]; i != 0; i = edge[i].next)
{
v = edge[i].v;
if(dis[v] > dis[u] + 1)
{
dis[v] = dis[u] + 1;
if(! use[v])
{
q.push(v);
use[v] = 1;
}
}
}
}
} int main()
{
// freopen("A.txt","r",stdin);
scanf("%d %d %d", &n, &m, &t);
int u,v;
for(int i = 1; i <= m; i ++)
{
scanf("%d %d", &u, &v);
Add(u,v,1);
Add(v,u,1);
}
int cnt;
scanf("%d", &cnt);
for(int i = 1; i <= cnt; i ++)
scanf("%d", &pos[i]); Spfa(1, dis1);
Spfa(n, dis2);
if(dis1[n] <= t)
{
printf("%d\n", dis1[n]);
}
else
{
int mn = INF;
for(int i = 1; i <= cnt; i ++)
if(dis1[pos[i]] <= t)
mn = min(mn, t + dis2[pos[i]]);
printf("%d\n", mn == INF ? -1 : mn);
} return 0;
}

系统警告,Bronya请求支援(两遍最短路)的更多相关文章

  1. UVA11374 Airport Express 正反两次最短路

    问题描述 洛谷(有翻译) 吐槽 一道坑题. 如何对待商务票 因为商务票只有一张,所以在\(k\)条边中只有一条边会被选中,很显然,最后这条边会被枚举. 如何选择使用商务票的边 假设我们正在枚举这条边, ...

  2. HDU5886 Tower Defence 【两遍树形dp】【最长链预处理】

    题意:N个点的一棵带权树.切掉某条边的价值为切后两树直径中的最大值.求各个边切掉后的价值和(共N-1项). 解法一: 强行两遍dp,思路繁琐,维护东西较多: dis表示以i为根的子树的直径,dis2表 ...

  3. srping mvc 集成CXF 导致类初始化两遍

    cxf依赖于spring的ContextLoaderListener,而spring mvc 则依赖于DispatcherServlet. 初始化DispatcherServlet的时候会依赖初始化一 ...

  4. AOP中Advice执行两遍的原因

    在我的spring项目中,Aop的Advice执行了两边,就好像拦截了两遍一样. 原因是:切面应该切到接口的实现类上,而不是接口上

  5. 在taro中跳转页面的时候执行两遍componentDidMount周期的原因和解决方法

    在做taro跳转的时候,发现在跳转后的页面会走两遍componentDidMount周期,查看了github上的issues,发现是跳转路由带参为中文引起的,只要把中文参数进行urlencode解决 ...

  6. Magic Potion(最大流,跑两遍网络流或者加一个中转点)

    Magic Potion http://codeforces.com/gym/101981/attachments/download/7891/20182019-acmicpc-asia-nanjin ...

  7. tomcat启动项目被重新加载,导致资源初始化两遍

    之前没有遇到过这个问题,配了三天的项目了,惊人啊!!!各种怪问题全被我赶上了.真有种骂人的冲动. tomcat启动项目时,项目资源被加载两遍. 原因:配置虚拟目录导致,项目被重新加载. <Hos ...

  8. Linux系统实现虚拟内存有两种方法:交换分区(swap分区)和交换文件

    Linux系统实现虚拟内存有两种方法:交换分区(swap分区)和交换文件 交换文件 查看内存:free -m , -m是显示单位为MB,-g单位GB 创建一个文件:touch /root/swapfi ...

  9. log4j2 日志打两遍的问题

    在使用log4j2的时候,一般都需要不同的日志分类打印不同的日志等级,如下面的配置 <!-- 用于指定log4j自动重新配置的监测间隔时间,单位是秒 --> <configurati ...

随机推荐

  1. An incompatible version [1.1.33] of the APR based Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]

    Springboot项目启动出现如下错误信息 解决办法在此地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/native/1.2.1 ...

  2. 日常破解--从XCTF的app3题目简单了解安卓备份文件以及sqliteCipher加密数据库

    一.题目来源     题目来源:XCTF app3题目 二.解题过程     1.下载好题目,下载完后发现是.ab后缀名的文件,如下图所示:     2.什么是.ab文件?.ab后缀名的文件是Andr ...

  3. DEV GridControl控件使用(CheckBox全选、操作按钮、事件处理,获取值)

    1.GridControl控件使用 (1)绑定数据源 //绑定DataTable gridControl1.DataSource = DbHelper.ExecuteDataTable("S ...

  4. 将root用户权限赋予普通用户

    将root用户权限赋予普通用户 普通用户想要拥有root用户的权限,必须修改/etc/sudoers文件 ,还必须使用visudo命令修改.一是因为这个命令能防止多个用户同时修改这个文件,二是能进行有 ...

  5. 1构建个人博客--使用Hugo快速成型

    概述 人在武汉,病毒肆虐. 隔离久了,有点闷,闲余时间找点事情做. 建个博客吧, 内容不重要,写不写也不那么要紧,目前水平也写不出什么有深度的东西. 但是这个姿势一定要优美, 过程一定要折腾. OK, ...

  6. Java反射之构造方法反射

    上一篇Java反射之Class类我们介绍了java反射的关键类Class, 反射就是由一个java类映射得到一个java类. 所以,我们自然能想到,一个类中应该有哪些属性,这里做个比方,人有名字年龄等 ...

  7. linux ftp服务器设置,只允许用户访问指定的文件夹,禁止访问其他文件夹

    在Linux中添加ftp用户,并设置相应的权限,操作步骤如下: 1.环境:ftp为vsftp.被限制用户名为test.被限制路径为/home/test 2.建用户:在root用户下: useradd ...

  8. call、apply和bind的学习

    相似之处:1.都是用来改变函数的this对象的指向的.2.第一个参数都是this要指向的对象.3.都可以利用后续参数传参. var xw = {  name : "小王",gend ...

  9. js 统计一个字符串中出现的字符最多的字符

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. Android平台接入OneNET

    1. OneNET简介 中国移动物联网开放平台是由中国移动打造的PaaS物联网开放平台. 平台能够帮助开发者轻松实现设备接入与设备连接,提供综合性的物联网解决方案,实现物联网设备的数据获取,数据存储, ...