luoguP3393逃离_僵尸岛_

一道洛谷不知道哪门子月赛的题

可以用此题来练习最短路算法

SPFA和dijkstra的练习题(关于Floyed,他死了

思路:

  本题是最短路板子。

  

  首先就是建立虚点0连向被控制的点,令边长为1,SPFA一遍,求出各点到虚点的距离,然后判断没被控制的各点距离是否不大于s+1,就能处理出所有危险的点,标记一下。

  然后就是跑再一遍SPFA,每次判断连向的点是否被标记,然后选择边权差分约束。

  但是这样算会算上到了n点的花费,而题意到了n点就不需要花费了,于是最后输出的答案还得减去多加的到n点的花费,然后就OK了(注意答案会爆int)。

code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue> #define N 100005
#define M 200005
#define INF 1e18
#define ll long long using namespace std; struct edge {
int to;
int from;
}e[M<<1];
int cnt,head[N]; inline void add_edge(int x,int y){
e[++cnt].from = y;
e[cnt].to = head[x];
head[x] = cnt;
}
int n,m,k,s,Q,P;
ll dis[N];
int vis[N],c[N]; void SPFA() {
queue <int> q;
//for(int i=1;i<=n;i++)dis[i]=INF;
memset(dis,0x3f3f3f,sizeof(dis));
for(int i = 1 ; i <= k ; i++){
dis[c[i]] = 0;
vis[c[i]] = 1;
q.push(c[i]);
}
while(!q.empty()) {
int u = q.front();
q.pop();
vis[u] = 0;
for(int i = head[u] ; i ; i = e[i].to) {
int v = e[i].from;
if(dis[v] > dis[u] + 1) {
dis[v] = dis[u] + 1;
if(!vis[v]) {
vis[v] = 1;
q.push(v);
}
}
}
}
}
ll w[N];
void spfa(){
queue <int> q;
for(int i = 1 ; i <= n ; i++) {
if(dis[i] <= s) w[i] = Q;
else w[i] = P;
dis[i] = INF;
}
for(int i = 1 ; i <= k ; i++)
w[c[i]] = INF;
vis[1] = 1;
dis[1] = w[n] = w[1] = 0;
q.push(1);
while(!q.empty()) {
int u = q.front();
q.pop();
vis[u] = 0;
for(int i = head[u] ; i ; i = e[i].to) {
int v = e[i].from;
if(dis[v] > dis[u] + w[u]){
dis[v] = dis[u] + w[u];
if(!vis[v]) {
vis[v] = 1;
q.push(v);
}
}
}
}
} int main() {
scanf("%d%d%d%d",&n,&m,&k,&s);
scanf("%d%d",&P,&Q);
for(int i = 1 ; i <= k ; i++)
scanf("%d",&c[i]);
for(int i = 1 ; i <= m ; i++) {
int x,y;
scanf("%d%d",&x,&y);
add_edge(x,y);
add_edge(y,x);
}
SPFA();
spfa();
printf("%lld\n",dis[n]);
return 0;
}

luogu P3393 逃离僵尸岛的更多相关文章

  1. luogu P3393 逃离僵尸岛-搜索剪枝+spfa

    P3393 逃离僵尸岛 题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被 ...

  2. 【luogu P3393 逃离僵尸岛】 题解

    题目链接:https://www.luogu.org/problemnew/show/P3393 被占领的点可以先连在一个点上然后只需要对这一个点bfs一遍就可以求所有的危险点 #include &l ...

  3. Luogu P3393 逃离僵尸岛【最短路】By cellur925

    题目传送门 题目大意:(其实概括出来也就基本做完了hh)在一张有$n$个点,$m$条边的无向图上,有$k$个点是不能经过的,而与之距离不超过$s$的点,到他们会花费$Q$元,到其他点会花费$p$元,求 ...

  4. P3393 逃离僵尸岛

    P3393 逃离僵尸岛 啊.好久不写dij手都生了 这道题就是预先处理出是否是危险城市,然后跑一个最短路就行了 然后因为我感觉这个对时间要求不大紧.判断危险城市时就写了个电风扇(DFS) 然后T飞了呜 ...

  5. 洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]

    题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...

  6. 洛谷P3393 逃离僵尸岛

    题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...

  7. luogu 3393 逃离僵尸岛

    题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...

  8. 洛谷P3393逃离僵尸岛 最短路

    貌似一直不写题解不太好QAQ 但是找不到题啊... 随便写点水题来补博客吧 题目不pa了,点链接吧... 点我看题 很明显这是道sb题... 思路:  对于每一个僵尸城市预处理其 s 距离内的城市,然 ...

  9. 洛谷 P3393 逃离僵尸岛

    洛谷 这道题目其实是最短路裸题. 首先看到题目,要求的到"被占点"距离不大于S的点,自然想到了以"被占点"为源点,求一遍最短路,处理出"危险点&quo ...

随机推荐

  1. 面向对象高级编程(1)-使用__slots__

    使用__slots__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> ...

  2. 所以到底什么是 Growth Hacking?

    Growth hacking 在硅谷的确是有快被用坏的趋势,之所以在大陆的互联网创业圈里还没有普及开来,我想一个是由于这个词并没有对应的中文解释,没有一个能够找到一个相对完美的解释,就像 “hack” ...

  3. 论C语言中二级指针和二维数组之间的区别

    刚开始学习C语言的时候,觉得一个数组可以定义一个一级指针去访问,想当然的就觉得可以定义一个二级指针去访问二维数组.很显然这是错误的. 我们来看看C语言的数组在内存中的存储方式. 实际上C语言中的数组, ...

  4. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  5. windows10安装ipython jupyter

    环境: windows 10 x64 python2.7(已经安装好numpy scipy matplotlib) 过程: 首先安装visual c++ 9.0环境,去http://aka.ms/vc ...

  6. Java并发编程原理与实战五:创建线程的多种方式

    一.继承Thread类 public class Demo1 extends Thread { public Demo1(String name) { super(name); } @Override ...

  7. 简易jQuery插件

    之前写过jQuery插件的笔记 如何用jQuery封装插件 我一直觉得前面讲了一大堆闭包和三种插件封装模式有点冗余,那篇笔记我直到记录到后面才发现这事情很简单,想来想去还是觉得网上的一些文章把事情搞复 ...

  8. 另类之将ipython notebook嵌入blog方法

    另类之将ipython notebook嵌入blog方法 ipynb文件很强大. 可是一直苦于没有找到好的方法把它直接嵌入到博文里. 现在得到一个另类的方法: 就是利用github集成了nbviewe ...

  9. 关于ES6 Class语法相关总结

    关于ES6,其实网上已经有很多的资料可供查询,教程可参考阮一峰大神的ES6入门,本文只是对Class这一语法做一个总结: 一.Class基本语法 constructor方法 constructor是类 ...

  10. 【转】Graphics.DrawImage 方法 IntPtr 结构 GDI 句柄 知识收集

    Graphics.DrawImage 方法 在指定的位置使用原始物理大小绘制指定的 Image. 命名空间:System.Drawing 程序集:System.Drawing(在 system.dra ...