显然最短路长度随着v的变化是单调的,于是可以二分答案,据说spfa在网格图上表现较差。

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
typedef double db;
typedef long long ll;
#define N 101
#define INF 2147483647.0
#define EPS 0.0000001
struct Point{db d;int u;};
bool operator < (Point a,Point b){return a.d>b.d;}
priority_queue<Point>q;
int T,n,m;
db L;
char a[N][N];
int en,v[N*N*4],first[N*N],next[N*N*4];
db w[N*N*4];
void AddEdge(int U,int V,db W)
{v[++en]=V;w[en]=W;next[en]=first[U];first[U]=en;
}
db d[N*N];
bool vis[N*N];
void dijkstra(int S)
{for(int i=1;i<=n*m;++i) d[i]=INF;d[S]=0; q.push((Point){0.0,S});while(!q.empty()){Point x=q.top(); q.pop();if(!vis[x.u]){vis[x.u]=1;for(int i=first[x.u];i;i=next[i])if(d[v[i]]>d[x.u]+w[i]){d[v[i]]=d[x.u]+w[i];q.push((Point){d[v[i]],v[i]});}}}
}
int id[N][N],Sta,End;
const int dx[]={0,0,-1,1},dy[]={-1,1,0,0};
bool check(db x)
{en=0;memset(first,0,sizeof(int)*(n*m+1));memset(vis,0,sizeof(bool)*(n*m+1));for(int i=1;i<=n;++i)for(int j=1;j<=m;++j) if(a[i][j]!='#'){for(int k=0;k<2;++k)if(i+dx[k]>0&&i+dx[k]<=n&&j+dy[k]>0&&j+dy[k]<=m&&a[i+dx[k]][j+dy[k]]!='#')AddEdge(id[i][j],id[i+dx[k]][j+dy[k]],1.0);for(int k=2;k<4;++k)if(i+dx[k]>0&&i+dx[k]<=n&&j+dy[k]>0&&j+dy[k]<=m&&a[i+dx[k]][j+dy[k]]!='#')AddEdge(id[i][j],id[i+dx[k]][j+dy[k]],x);}dijkstra(Sta);return L-d[End]<EPS;
}
int main()
{scanf("%d",&T);for(;T;--T){scanf("%lf%d%d\n",&L,&n,&m);en=0;for(int i=1;i<=n;++i)gets(a[i]+1);for(int i=1;i<=n;++i)for(int j=1;j<=m;++j){id[i][j]=++en;if(a[i][j]=='S') Sta=id[i][j];else if(a[i][j]=='E') End=id[i][j];}db l=0.0,r=10.0;while(r-l>EPS){db mid=(l+r)/2.0;if(check(mid)) r=mid;else l=mid+EPS;}printf("%.5lf\n",l);}return 0;
}

转载于:https://www.cnblogs.com/autsky-jadek/p/4435155.html

【二分答案】【Heap-Dijkstra】bzoj2709 [Violet 1]迷宫花园相关推荐

  1. BZOJ 2709 Violet 1 迷宫花园

    2709: [Violet 1]迷宫花园 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 976  Solved: 340 [Submit][Statu ...

  2. hihoCoder 第136周 优化延迟(二分答案+手写堆)

    题目1 : 优化延迟 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho编写了一个处理数据包的程序.程序的输入是一个包含N个数据包的序列.每个数据包根据其重要程度不同 ...

  3. BZOJ2547 CTSC2002玩具兵(最短路径+二分答案+最大流)

    先不考虑只有一个显得有些特殊的天兵. 可以发现超能力的作用实质上是使兵更换职业.每一个兵到达某个位置最少需要更换职业的次数是彼此独立的,因为如果需要某两人互换职业可以使他们各自以当前职业到达需要到的地 ...

  4. UVA1396 Most Distant Point from the Sea(AM - ICPC - Tokyo - 2007)(计算几何,半平面交 + 二分答案)

    整理的算法模板合集: ACM模板 题目传送门 见<训练指南>P279 很明显就是一个二分答案,它问的是最远的点,直接枚举因为这里都是double类型的数所以有无限个点,我们可以直接二分. ...

  5. UVA1146 / LA3211(ACM-ICPC 2004 Europe - Southwestern) Now or later(2-SAT问题 + 二分答案)

    题目要求为 最大化最小值,很明显就是二分答案. 题目中每个飞机 要么是一种状态(早),要么是另一种状态(晚),考虑 2-SAT. 我们二分答案,二分着陆时间间隔的最小值 x. 枚举每两个飞机 p , ...

  6. 解题报告:luoguP2868 Sightseeing Cows G(最优比率环,负环判定,二分答案)

    根据题意,我们要环上各点权值之和除以各边权值之和最大. 求最大答案,很明显可以使用二分答案.那么我们假设当前答案为 x,如果有更大的答案,那么方程就可以按下图转换: 也就是说如果有更大的答案,则有一个 ...

  7. P2759 奇怪的函数(二分答案,数学运算)

    P2759 奇怪的函数 范围2e92e92e9,直接枚举肯定超时,正着直接求答案求不出来,那么运用逆向思维,直接二分答案判断即可.这道题涉及简单的数学运算. 要xx>=nx^x>=nxx& ...

  8. P3743 kotori的设备(二分答案,思维,线性)难度⭐⭐⭐

    题目链接 题目背景 kotori 有 n 个可同时使用的设备. 题目描述 第 i 个设备每秒消耗ai个单位能量.能量的使用是连续的,也就是说能量不是某时刻突然消耗的,而是匀速消耗.也就是说,对于任意实 ...

  9. 【基础算法】二分法(二分答案,二分查找),三分法,Dinkelbach算法,算法详解+例题剖析

    目录 一 . 二分法 二分搜索得要求: 二分查找步骤: 二分答案: 玄学的二分(二分答案) 二 . 三分法 例题 三.01分数规划问题相关算法与题目讲解(二分法与Dinkelbach算法) 一 . 二 ...

  10. 洛谷P1182 数列分段Section II 二分答案

    洛谷P1182 数列分段Section II 二分答案 题意:将 n 个 数 分为 m段 求一种方案,使这m段中最大的和 最小 额..可能有点拗口,其实就是说每一种方案,都有对应的 每段和的最大值, ...

最新文章

  1. NetLogo入门(二)——模型基本语法
  2. (正确姿势)centos7 如何从U盘拷贝文件
  3. 全面解读数据中台,让企业实现数字化转型
  4. c++输出的值精确到小数点后5位_七年级上册第一章有理数专讲专练(适合暑期预习后巩固)...
  5. MyBatis复习(五):获取多表关联查询结果
  6. 通用时区:你应该知道的数据库时区知识
  7. 项目经理如何确保工程质量
  8. Vue 组件库 (一)
  9. 【北京迅为】i.MX6ULL终结者RS232驱动测试RS485测试
  10. iOS 唤起各种App的方法总结
  11. python输入一个三位整数、求逆序数_编写程序,从键盘输入一个三位数,求出其逆序数并输出,例如输入123,输出321。编写程序,从键盘输入一个三位数...
  12. linux超级用户添加,为linux普通用户添加超级用户权限sudo
  13. 快书编标让标书制作更高效、更规范、更轻松
  14. SWUST OJ312: 偷菜
  15. 5.小程序的Ajax数据请求
  16. /项目3-分数类中的运算符重载
  17. python中elif和else的区别_浅谈Python的条件判断语句if/else语句
  18. arm linux运行安卓app,Android x86 下运行纯ARM版APP
  19. 知道很多大道理,却依旧无法过上想要的生活?
  20. Programming Languages PartA Week3学习笔记——SML基本语法第二部分

热门文章

  1. Ubuntu安装Apache+PHP
  2. 第一个Java程序示例——Hello World!【转】
  3. PAT1030 Travel Plan (30)---DFS
  4. 宋体、代码-iOS网络编程实践--NSStream实现TCP Socket iPhone客户端-by小雨
  5. 自己的 并查集 模板
  6. Deeplabv3+ 环境配置-Anaconda3 + Pytorch1.8 + Cuda10.1 + opencv3.2.0
  7. Ananagrams (多种stl)
  8. [面试]synchronized
  9. QueryRunner类常用的方法
  10. Oracle VM VirtualBox 无法卸载 更新 和修复