[luogu3393 逃离僵尸岛]
来源:互联网 发布:红辣椒电影数据分析 编辑:程序博客网 时间:2024/04/26 20:06
题目链接
题解:实力搜索……
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <climits>using namespace std;#define INF LLONG_MAX>>1const int M=100005;int n,m,t,k,s,P,Q;long long d[M];int head[M];long long mark[M];int dr[M],x[2*M],y[2*M];bool vis[M];struct edge{ int to,next,val;}e[M*4];queue <int> q;void add(int i,int j,int w){ e[t].to=j; e[t].val=w; e[t].next=head[i]; head[i]=t++;}void init(){ t=0; memset(head,-1,sizeof(head)); cin>>n>>m>>k>>s>>P>>Q; for(int i=1;i<=k;i++) scanf("%d",&dr[i]),mark[dr[i]]=INF; for(int i=1;i<=m;i++) { scanf("%d%d",&x[i],&y[i]); add(x[i],y[i],1); add(y[i],x[i],1); }}void ready(int s){ for(int i=1;i<=n;i++) vis[i]=0,d[i]=INF; d[s]=0;vis[s]=1;}void bfs(int x){ ready(x); q.push(x); while(!q.empty()) { int u=q.front();q.pop(); for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].to; if(!vis[v]&&mark[v]!=INF){ d[v]=d[u]+1; vis[v]=1; mark[v]=Q; if(d[v]<=s-1) q.push(v); } } }}void cj(){ t=0; memset(head,-1,sizeof(head)); for(int i=1;i<=m;i++) { long long sto=mark[x[i]]+mark[y[i]]; if(sto>=INF) continue; add(x[i],y[i],int(sto)); add(y[i],x[i],int(sto)); }}void spfa(int s){ ready(s);q.push(s); while(!q.empty()) { int u=q.front();q.pop();vis[u]=0; for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].to; if(d[v]>d[u]+e[i].val) { d[v]=d[u]+e[i].val; if(!vis[v]){ vis[v]=1; q.push(v); } } } }}void work(){ for(int i=1;i<=k;i++) bfs(dr[i]); for(int i=1;i<=n;i++) if(mark[i]==0) mark[i]=P; mark[1]=mark[n]=0; cj();spfa(1); cout<<(d[n]>>1)<<endl;}int main(){ init(); work(); return 0;}
0 0
- [luogu3393 逃离僵尸岛]
- 洛谷 P3393 逃离僵尸岛
- 逃离
- 逃离
- 逃离
- 逃离南方周末
- 逃离南京
- 逃离华为
- 无法逃离
- 逃离迷宫
- 逃离迷宫
- 逃离迷宫
- 逃离迷宫
- 逃离迷宫
- 逃离迷宫
- 逃离迷宫
- 逃离迷宫
- 逃离迷宫
- java 堆内存 与栈内存
- 串口通信设置步骤
- Ubuntu--(5)Linux下C++编译生成自定义静态库/动态库
- 视觉slam学习资料
- 关于HTTP的总结
- [luogu3393 逃离僵尸岛]
- Error: demo (wrong name: Dem o)
- HDFS中dfsadmin命令的使用
- POJ 3922 A simple stone game(K倍减法游戏)
- 京津冀交通一体化规划公布 四纵四横一环格局确定
- [luogu3392 涂国旗]
- vs2010 下 当前项目调试编译失败时,设置不启动上一次成功的实例
- fzu 2035 Axial symmetry 判轴对称多边形
- 【C语言】请实现一个函数,把字符数组中的每个空格替换成“%20”