Frogger
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 55388   Accepted: 17455

Description

Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who is sitting on another stone. He plans to visit her, but since the water is dirty and full of tourists' sunscreen, he wants to avoid swimming and instead reach her by jumping. 
Unfortunately Fiona's stone is out of his jump range. Therefore Freddy considers to use other stones as intermediate stops and reach her by a sequence of several small jumps. 
To execute a given sequence of jumps, a frog's jump range obviously must be at least as long as the longest jump occuring in the sequence. 
The frog distance (humans also call it minimax distance) between two stones therefore is defined as the minimum necessary jump range over all possible paths between the two stones. 

You are given the coordinates of Freddy's stone, Fiona's stone and all other stones in the lake. Your job is to compute the frog distance between Freddy's and Fiona's stone. 

Input

The input will contain one or more test cases. The first line of each test case will contain the number of stones n (2<=n<=200). The next n lines each contain two integers xi,yi (0 <= xi,yi <= 1000) representing the coordinates of stone #i. Stone #1 is Freddy's stone, stone #2 is Fiona's stone, the other n-2 stones are unoccupied. There's a blank line following each test case. Input is terminated by a value of zero (0) for n.

Output

For each test case, print a line saying "Scenario #x" and a line saying "Frog Distance = y" where x is replaced by the test case number (they are numbered from 1) and y is replaced by the appropriate real number, printed to three decimals. Put a blank line after each test case, even after the last one.

Sample Input

2
0 0
3 4 3
17 4
19 4
18 5 0

Sample Output

Scenario #1
Frog Distance = 5.000 Scenario #2
Frog Distance = 1.414

传送门:点击打开链接

题目大意:一只青蛙要从点1到点2,给你n个坐标,问你青蛙要达到终点,单次跳跃的最短距离是多少。

思路:一开始想到二分,感觉很麻烦,然后想到djkstra算法里的dis【】,一般我们用这个dis表示从起点点集到某一个点的最短总距离,现在我们可以用dis来表示,从起点点集到某一个点单次跳跃的最短距离,所以有了

for(int j=1;j<=n;j++){
if(!vis[j])
dis[j]=min(dis[j],max(g[p][j],dis[p]));
}

其实就是用三角形,1,p,j三个点,dis【j】要么是本身,要么是另外两条边最大的那一条。

核心思想就是这样,其他的没什么坑点了。然后上完整代码。

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<math.h>
#include<cmath>
#include<time.h>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<algorithm>
#include<numeric>
#define ll long long
using namespace std;
const int maxn=210;
const int INF=0x3f3f3f3f;
struct dian {
double x,y;
} a[maxn];
double g[maxn][maxn];
double dis[maxn];
int vis[maxn],n;
void djks(){
for(int i=1;i<=n;i++){
dis[i]=g[1][i];
}
memset(vis,0,sizeof(vis));
vis[1]=1;
for(int i=1;i<n;i++){
double minn=INF;
int p;
for(int j=1;j<=n;j++){
if(!vis[j]&&dis[j]<minn){
p=j;
minn=dis[j];
}
}
vis[p]=1;
for(int j=1;j<=n;j++){
if(!vis[j])
dis[j]=min(dis[j],max(g[p][j],dis[p]));//核心 用三角形的思路来松弛
}
}
}
int main() {
int cas=1;
while(scanf("%d",&n),n) {
memset(g,INF,sizeof(g));
for(int i=1; i<=n; i++) {
scanf("%lf%lf",&a[i].x,&a[i].y);
}
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
double x=a[i].x-a[j].x;
double y=a[i].y-a[j].y;
g[i][j]=g[j][i]=pow(x*x+y*y,0.5);
}
}
djks();
printf("Scenario #%d\n",cas++);
printf("Frog Distance = %.3f\n\n",dis[2]);
}
}

poj2253青蛙(可到达路径的单次跳跃最短距离)的更多相关文章

  1. [LeetCode] Frog Jump 青蛙过河

    A frog is crossing a river. The river is divided into x units and at each unit there may or may not ...

  2. POJ2253 Frogger

    Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 34865   Accepted: 11192 Descrip ...

  3. P1052 过河 线性dp 路径压缩

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  4. 【洛谷】P1052 过河【DP+路径压缩】

    P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙 ...

  5. poj2253 Frogger dijkstra

    题目大意: 给出n个岛的坐标,前两个坐标分别为A青蛙和B青蛙所在岛的坐标,A青蛙想到达B青蛙所在的岛,A可以从某一个岛跳到任意其它一个岛上,则A到B的每条路径都有一个跳的最远的距离Xi,求这些最远距离 ...

  6. TOJ 2710: 过河 路径压缩

    2710: 过河  Time Limit(Common/Java):1000MS/10000MS     Memory Limit:65536KByteTotal Submit: 32         ...

  7. [LeetCode] 882. Reachable Nodes In Subdivided Graph 细分图中的可到达结点

    Starting with an undirected graph (the "original graph") with nodes from 0 to N-1, subdivi ...

  8. NOIP 2005 青蛙过河

    做题记录:2016-08-10 21:58:09 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都 ...

  9. ooj 1066 青蛙过河DP

    http://121.249.217.157/JudgeOnline/problem.php?id=1066 1066: 青蛙过河 时间限制: 1 Sec  内存限制: 64 MB提交: 58  解决 ...

随机推荐

  1. TCP/IP 笔记 1.1 概 述

    四个层次 每一层负责不同的功能:1) 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡.它们一起处理与电缆(或其他任何传输媒介)的物理接口细节.2) ...

  2. warning: control reaches end of non-void function 和 warning: implicit declaration of function 'rsgClearColor' is invalid in C99

    用gcc编译一个程序的时候出现这样的警告: warning: control reaches end of non-void function 它的意思是:控制到达非void函数的结尾.就是说你的一些 ...

  3. Ajax入门(二)Ajax函数封装

    如果看了的我上一篇博客<Ajax入门(一)从0开始到一次成功的GET请求>的话,肯定知道我们已经完成了一个简单的get请求函数了.如下: 1234567891011121314151617 ...

  4. day18-事务与连接池 3.jdbc中事务操作介绍

    那么我们都是通过程序操作数据库.所以要了解jdbc下怎样对事务操作.jdbc如何操作事务? 自动事务false那就不开了呗相当于开启事务. package cn.itcast.transaction; ...

  5. 框架之 hibernate之关联关系映射

    案例:完成CRM的联系人的保存操作 需求分析 1. 因为客户和联系人是一对多的关系,在有客户的情况下,完成联系人的添加保存操作 技术分析之Hibernate的关联关系映射之一对多映射(重点) 1. J ...

  6. C++实现数组的排序/插入重新排序/以及逆置操作

    插入新的数字重新排序 分析:将新的数字与已经排序好的数组中的数字一一比较,直到找到插入点,然后将插入点以后的数字都向后移动一个单位(a[i+1]=a[i]),然后将数据插入即可. 代码: #inclu ...

  7. win10和ubuntu双系统下卸载ubuntu

    1.进入win10 2.下载EasyBCD,360软件管家里面有,version=2.2 3.启动软件,工具箱里面选择“BCD部署”→MBR配置选项中选“在MBR中安装Windows Vista/7的 ...

  8. STL 堆的使用

    本来是要写leetcode上的merge k sorted lists那道题目,这个题目我还是很熟悉的,毕竟是看过算法导论的人,但是写的过程中对堆的维护代码还是挺多的,所以我想到了STL中的堆.下面就 ...

  9. [转]Marshaling a SAFEARRAY of Managed Structures by P/Invoke Part 1.

    1. Introduction. 1.1 I have previously written about exchanging SAFEARRAYs of managed structures wit ...

  10. InnoDB记录压缩及使用分析

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 这篇文章,源于RDS组内的一次饭后闲聊,两位小伙伴在探讨InnoDB启用压缩后的种种,比如在磁盘上是怎么存放 ...