题意

有条宽为w的河流,两岸分别在x = 0, x = w处,河中间有n个石板。在河的一岸有一只青蛙想通过石板跳到对岸去。现在可以在河
中间某个位置多加一块石板,使得在单步跳跃中的最大值最小。

思路

Dijkstra变形,用两维来表示是否路径中使用过额外的石板。dis[0][u]表示没使用额外石板的最大最小,dis[1][u]表示使
用额外石板的最大最小。然后就用Dijkstra格式进行转移了。
/*****************************************
Author      :Crazy_AC(JamesQi)
Time        :2016
File Name   :
*****************************************/
// #pragma comment(linker, "/STACK:1024000000,1024000000")
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <sstream>
#include <string>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <map>
#include <set>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <climits>
using namespace std;
#define MEM(x,y) memset(x, y,sizeof x)
#define pk push_back
#define lson rt << 1
#define rson rt << 1 | 1
#define bug cout << "BUG HERE\n"
#define ALL(v) (v).begin(), (v).end()
#define lowbit(x) ((x)&(-x))
#define Unique(x) sort(ALL(x)); (x).resize(unique(ALL(x)) - (x).begin())
#define BitOne(x) __builtin_popcount(x)
#define showtime printf("time = %.15f\n",clock() / (double)CLOCKS_PER_SEC)
#define Rep(i, l, r) for (int i = l;i <= r;++i)
#define Rrep(i, r, l) for (int i = r;i >= l;--i)
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> ii;
typedef pair<ii,int> iii;
const double eps = 1e-8;
const double pi = 4 * atan(1);
const int inf = 1 << 30;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
int nCase = 0;
const int maxn = 1e3 + 123;
struct point {double x, y;void read() {scanf("%lf%lf", &x, &y);}double operator ^ (const point& rhs) {return sqrt((x - rhs.x) * (x - rhs.x) + (y - rhs.y) * (y - rhs.y));}
}a[maxn];
struct Edge {int v, nxt;double dis;
}e[maxn*maxn*4];
int head[maxn], ecnt;
void inline addedge(int u,int v,double dis) {e[ecnt] = Edge{v, head[u], dis}, head[u] = ecnt++;e[ecnt] = Edge{u, head[v], dis}, head[v] = ecnt++;
}
double dis[2][maxn];
int n, w;
struct node {int u;double md;bool used;point o;bool operator < (const node& rhs) const {return md > rhs.md || (md == rhs.md && used > rhs.used);// return md > rhs.md;}
};
void gao() {point ans;double m = INF;priority_queue<node> que;Rep(i, 0, n + 1) dis[0][i] = dis[1][i] = INF;que.push(node{0, 0, false, point{0, 0}});dis[0][0] = 0;while(!que.empty()) {node temp = que.top();que.pop();int u = temp.u;if (u == n + 1) {printf("%.12lf %.12lf\n", temp.o.x, temp.o.y);return ;// if (temp.md < m) {//     m = temp.md;//     ans.x = temp.o.x;//     ans.y = temp.o.y;// }continue;}for (int i = head[u]; ~i;i = e[i].nxt) {int v = e[i].v;if (v == 0) continue;if (temp.used) {if (dis[1][v] > max(temp.md, e[i].dis)) {dis[1][v] = max(temp.md, e[i].dis);que.push(node{v, dis[1][v], true, temp.o});}}else {double x, y;//边界处理,容易错if (u != 0 && v != n + 1) {x = (a[u].x + a[v].x) / 2.0;y = (a[u].y + a[v].y) / 2.0;}if (u != 0 && v == n + 1) {x = (a[u].x + w) / 2.0;y = a[u].y;}if (u == 0 && v == n + 1) {x = w / 2.0;y = 0;}if (u == 0 && v != n + 1) {x = a[v].x / 2.0;y = a[v].y;}// printf("[%.2lf, %.2lf]\n", x, y);if (dis[0][v] > max(temp.md, e[i].dis)) {dis[0][v] = max(temp.md, e[i].dis);que.push(node{v, dis[0][v], false, point{0, 0}});}if (dis[1][v] > max(temp.md, e[i].dis / 2.0)) {dis[1][v] = max(temp.md, e[i].dis / 2.0);que.push(node{v, dis[1][v], true, point{x, y}});}}}}printf("%.12lf %.12lf\n", ans.x, ans.y);
}
int main(int argc, const char * argv[])
{    // freopen("in.txt","r",stdin);// freopen("out.txt","w",stdout);freopen("froggy.in","r",stdin);freopen("froggy.out","w",stdout);while(~scanf("%d%d", &w, &n)) {Rep(i, 1, n) a[i].read();memset(head, -1, sizeof head), ecnt = 0;int vs = 0, vt = n + 1;addedge(vs, vt, w);Rep(i, 1, n) {addedge(vs, i, a[i].x);addedge(i, vt, w - a[i].x);Rep(j, i + 1, n) {addedge(i, j, a[i] ^ a[j]);}}if (n == 0) {printf("%.12lf 0\n", w / 2.0);continue;}gao();}// showtime;return 0;
}

Gym 100851F Froggy Ford(dijkstra)相关推荐

  1. Gym - 100851F Froggy Ford (Dijkstra)

    题目链接:https://cn.vjudge.net/problem/Gym-100851F 这道题是POJ-2253的升级版:https://blog.csdn.net/GYH0730/articl ...

  2. Gym - 100851F Froggy Ford kruskal

    题目链接: http://acm.hust.edu.cn/vjudge/problem/307216 Froggy Ford Time Limit: 3000MS 题意 青蛙过河,河中有若干个石头,现 ...

  3. Gym - 100851F - Froggy Ford(dijkstra)

    题目链接 参考   http://blog.csdn.net/KIJamesQi/article/details/52214990 题意 蛤蛤要从这岸去到对岸,河中有n块石头,现可以在河中添加一块石头 ...

  4. Gym - 100851F Froggy Ford

    题目链接: http://codeforces.com/gym/100851/attachments 题解: 二分枚举长度,BFS暴力找路径,注意边界的处理 代码: #include <set& ...

  5. 【二分答案】【DFS】【分类讨论】Gym - 100851F - Froggy Ford

    题意:河里有n块石头,一只青蛙要从左岸跳到右岸,你可以再在任意一个位置放一块石头,使得在最优方案下,青蛙单步跳的距离的最大值最小化,输出该位置. 将原图视作完全图,二分答案mid,然后在图中只保留小于 ...

  6. Froggy Ford Gym - 100851F

    http://codeforces.com/gym/100851/attachments 青蛙过河 n个石头 当作n个点 任意两点之间都有边 边的花费即为两点欧式距离 现在可以在任意位置加一个石头 使 ...

  7. 【最短路】NEERC15 F Froggy Ford(2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: 一只青蛙跳过宽为W的河,河中游N个石头,坐标xi,yi,现在往河中间添加一个石头,使得每次跳跃的最大的距离最小 ...

  8. Gym-100851F Froggy Ford 最短路变形 dijkstra || spfa

    题意:有条宽为w的河流,两岸分别在x = 0, x = w处,河中间有n个石头.在河的左岸有一只青蛙想通过石头跳到对岸去.现在可以在河中间某个位置多加一块石头,使得青蛙在单步跳跃中的最大值最小,问应在 ...

  9. 【最短路】NEERC15 F Froggy Ford (Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: 一只青蛙跳过宽为W的河,河中游N个石头,坐标xi,yi,现在往河中间添加一个石头,使得每次跳跃的最大的距离最小 ...

最新文章

  1. ATT汇编语言与GCC内嵌汇编简介
  2. 网络营销外包专员浅析从用户角度出发如何完善网络营销外包?
  3. axure9中继器添加一列序号自增_中继器如何做简单穿梭框
  4. drop by time at xjtlu consultation center
  5. [BZOJ1500][NOI2005]维修数列(splay)
  6. 统一流控服务开源:基于.Net Core的流控服务
  7. 网络批量后修改服务器,企业网络批量安装服务器搭建案例
  8. Go语言构建高并发分布式系统实践
  9. 中彩体彩排列3彩票软件 解压缩软件
  10. excel常用函数汇总 excel最常用的八个函数 excel自动求减
  11. Flixel Dame Tank学习一:半成品坦克大战
  12. 如何复制Google云端硬盘文件夹
  13. oracle启动实例界面,oracle 11g 启动数据库实例
  14. 批处理文件rd \s\q **是什么意思?
  15. 咱们玩家最幽默(关于《无极》)
  16. Python基础语法——基础语法、变量
  17. 一、判别一个分解的无损连接性
  18. 说我菜?那好,我用Python制作电脑与手机游戏脚本来赢你
  19. 男人20不勤,30不立,40则不富……
  20. 列举MySQL事务的隔离级别_mysql dba系统学习(22)数据库事务详解

热门文章

  1. altium designer电气符号和包的常用元素
  2. zencart购物车修改调用显示购物车图片,修改边栏购物车模版
  3. 《洛克菲勒留给儿子的38封信》选摘
  4. Chrome中模拟定位信息,清除定位信息
  5. 【微信小程序-原生开发】实用教程09 - 可滚动选项,动态列表-步骤条(含事件传参),动态详情(含微信云查询单条数据 doc)
  6. 简单模拟-----PAT乙级1001 害死人不偿命的(3n+1)猜想
  7. PPT另存为pdf的图片失真问题解决
  8. 2023年,真正的智慧楼宇大脑什么样?建立可视化的智慧楼宇舒适化模型
  9. VUE axios 请求帮助类
  10. 一起来了解病毒和勒索软件常见藏身之所