P3393 逃离僵尸岛
啊。好久不写dij手都生了
这道题就是预先处理出是否是危险城市,然后跑一个最短路就行了
然后因为我感觉这个对时间要求不大紧。判断危险城市时就写了个电风扇(DFS)
然后T飞了呜呜呜~~
//Dan数组是标记一个城市是否是危险城市
void danger(int now,int dist)
{
if(dist>s) return ;
if(!Dan[now]) Dan[now]=1;
if(!dist) Dan[now]=-1;//-1表示感染城市
for(int i=head[now];i;i=line[i].nxt)
danger(line[i].p,dist+1);
}
然后又怒改了一波百分数(BFS)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using std::swap;
using std::queue;
const int N=101000,M=202000;
struct Data
{
int p;
long long dis;
bool operator < (const Data &a)const
{
return dis<a.dis;
}
};
struct Link
{
int p;
int nxt;
};
Data base[M<<3];
Link line[M<<1];
int head[N],tail;
int n,m,k,s,p,q,len;
int zombie[N];
int Dan[N];
long long dis[N];
bool get[N];
Data top()
{
return base[1];
}
void push(Data a)
{
base[++len]=a;
int pos=len;
while((pos>>1)&&base[pos]<base[pos>>1])
{
swap(base[pos],base[pos>>1]);
pos>>=1;
}
return ;
}
void pop()
{
swap(base[1],base[len--]);
int pos=1,nxt;
while(true)
{
nxt=pos;
if(base[pos<<1]<base[nxt]&&(pos<<1)<=len)
nxt=pos<<1;
if(base[pos<<1|1]<base[nxt]&&(pos<<1|1)<=len)
nxt=pos<<1|1;
if(pos==nxt) break;
swap(base[pos],base[nxt]);
pos=nxt;
}
return ;
}
void add(int a,int b)
{
line[++tail].p=b;
line[tail].nxt=head[a];
head[a]=tail;
}
queue<int>Q;
void danger()
{
while(!Q.empty())
{
int pas=Q.front();Q.pop();
for(int i=head[pas];i;i=line[i].nxt)
if(!Dan[line[i].p]&&Dan[pas]<s)
{
Dan[line[i].p]=Dan[pas]+1;
Q.push(line[i].p);
}
}
for(int i=1;i<=k;i++) Dan[zombie[i]]=-1;
}
int main()
{
memset(dis,127,sizeof(dis));
scanf("%d%d%d%d%d%d",&n,&m,&k,&s,&p,&q);
for(int i=1;i<=k;i++)
{
scanf("%d",&zombie[i]);
Q.push(zombie[i]);
}
int a,b;
for(int i=1;i<=m;i++)
{
scanf("%d%d",&a,&b);
add(a,b);add(b,a);
}
danger();
Data pas,nxt;pas.p=1;pas.dis=0;
push(pas);
while(len)
{
pas=top();
while(get[pas.p]){ pop();pas=top(); }
get[pas.p]=true;dis[pas.p]=pas.dis;
if(pas.p==n) break;
for(int i=head[pas.p];i;i=line[i].nxt)
{
int v=line[i].p;
long long dist=p;
if(Dan[v]==-1) continue;
if(Dan[v]) dist=q;
if(v==n) dist=0;
if(dis[pas.p]+dist<dis[v])
{
nxt.p=v;
nxt.dis=dis[v]=dis[pas.p]+dist;
push(nxt);
}
}
}
printf("%lld",dis[n]);
}
P3393 逃离僵尸岛的更多相关文章
- luogu P3393 逃离僵尸岛-搜索剪枝+spfa
P3393 逃离僵尸岛 题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被 ...
- luogu P3393 逃离僵尸岛
luoguP3393逃离_僵尸岛_ 一道洛谷不知道哪门子月赛的题 可以用此题来练习最短路算法 SPFA和dijkstra的练习题(关于Floyed,他死了 思路: 本题是最短路板子. 首先就是建立虚点 ...
- 洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]
题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...
- 洛谷P3393 逃离僵尸岛
题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...
- 【luogu P3393 逃离僵尸岛】 题解
题目链接:https://www.luogu.org/problemnew/show/P3393 被占领的点可以先连在一个点上然后只需要对这一个点bfs一遍就可以求所有的危险点 #include &l ...
- 洛谷P3393逃离僵尸岛 最短路
貌似一直不写题解不太好QAQ 但是找不到题啊... 随便写点水题来补博客吧 题目不pa了,点链接吧... 点我看题 很明显这是道sb题... 思路: 对于每一个僵尸城市预处理其 s 距离内的城市,然 ...
- 洛谷 P3393 逃离僵尸岛
洛谷 这道题目其实是最短路裸题. 首先看到题目,要求的到"被占点"距离不大于S的点,自然想到了以"被占点"为源点,求一遍最短路,处理出"危险点&quo ...
- Luogu P3393 逃离僵尸岛【最短路】By cellur925
题目传送门 题目大意:(其实概括出来也就基本做完了hh)在一张有$n$个点,$m$条边的无向图上,有$k$个点是不能经过的,而与之距离不超过$s$的点,到他们会花费$Q$元,到其他点会花费$p$元,求 ...
- [题解] 洛谷 P3393 逃离僵尸岛
题目TP门 很明显是一个最短路,但是如何建图才是关键. 对于每一个不可遍历到的点,可以向外扩散,找到危险城市. 若是对于每一个这样的城市进行搜索,时间复杂度就为\(O(n^2)\),显然过不了.不妨把 ...
随机推荐
- 【转】python平台libsvm安装
来源:http://blog.csdn.net/prom1201/article/details/51382358 网上有很多麻烦的在win64机器上安装libsvm的步骤,实际上只要在下面网站找到l ...
- 移除“xmlns”命名空间
用XmlDocument创建一个文档,或者插入一个节点,默认会生成xmlns(命名空间)特性. 假定有一个xml文档如下结构: <?xml version="1.0" enc ...
- Win10内置应用恢复初始状态
和Win8/Win8.1相同,Win10也内置了很多默认Windows应用,比如计算器.天气.人脉.Groove音乐.电影和电视.邮件和日历.Edge浏览器等.一般情况下,这些应用不会有太大的问题,但 ...
- js event事件绑定的方法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Hadoop 2.7.2 集群搭建(转载)
http://blog.csdn.net/u010048823/article/details/51913608
- 【ubuntu】更换下载源
ubuntu,我们在使用apt新装软件的时候,会使用官方的网站去下载软件,但是会因为国内的转接点太多,而导致下载的速度非常慢 ,我们可以通过换成一些中间的节点来进行下载,比如阿里源,中科大源,清华源等 ...
- 重构指南 - 移除重复内容(Remove Duplication)
在项目中或多或少的都存在着重复的或者功能相似的代码,如果要对代码做改动,就要修改多个地方,所以我们需要将多处重复的代码提取到一个公共的地方供统一调用,以减少代码量,提高代码可维护性. 重构前代码 pu ...
- CPU调度
概念 1.控制,协调进程对CPU的竞争,按一定的调度算法从就绪队列中选择一个进程把CPU的使用权交给被选中的进程, 如果没有就绪进程,系统会安排一个系统空闲进程或idle进程 cpu调度要解决的三个问 ...
- angular2-模块
Angular模块 (NgModule) Angular 模块是带有 @NgModule 装饰器函数的类. @NgModule接收一个元数据对象,该对象告诉 Angular 如何编译和运行模块代码. ...
- vue 音乐播放器报错
使用Vue报错[Vue warn]: Error in nextTick: "TypeError: fn.bind is not a function"页面进不去. 检查:看看da ...