poj2253青蛙(可到达路径的单次跳跃最短距离)
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 55388 | Accepted: 17455 |
Description
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
Output
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
传送门:点击打开链接
思路:一开始想到二分,感觉很麻烦,然后想到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青蛙(可到达路径的单次跳跃最短距离)的更多相关文章
- [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 ...
- POJ2253 Frogger
Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 34865 Accepted: 11192 Descrip ...
- P1052 过河 线性dp 路径压缩
题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...
- 【洛谷】P1052 过河【DP+路径压缩】
P1052 过河 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙 ...
- poj2253 Frogger dijkstra
题目大意: 给出n个岛的坐标,前两个坐标分别为A青蛙和B青蛙所在岛的坐标,A青蛙想到达B青蛙所在的岛,A可以从某一个岛跳到任意其它一个岛上,则A到B的每条路径都有一个跳的最远的距离Xi,求这些最远距离 ...
- TOJ 2710: 过河 路径压缩
2710: 过河 Time Limit(Common/Java):1000MS/10000MS Memory Limit:65536KByteTotal Submit: 32 ...
- [LeetCode] 882. Reachable Nodes In Subdivided Graph 细分图中的可到达结点
Starting with an undirected graph (the "original graph") with nodes from 0 to N-1, subdivi ...
- NOIP 2005 青蛙过河
做题记录:2016-08-10 21:58:09 题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都 ...
- ooj 1066 青蛙过河DP
http://121.249.217.157/JudgeOnline/problem.php?id=1066 1066: 青蛙过河 时间限制: 1 Sec 内存限制: 64 MB提交: 58 解决 ...
随机推荐
- hbase.client.RetriesExhaustedException: Can't get the locations hive关联Hbase查询报错
特征1: hbase.client.RetriesExhaustedException: Can't get the locations 特征2: hbase日志报错如下:org.apache.zoo ...
- PL/SQL批处理语句(一)BULK COLLECT
我们知道PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理,这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换,每次却换时,都有额外的开销.然而,FORA ...
- solr笔记--solr3.2以后支持document和json两种对象来更新索引
1.json形式(比如把mongodb数据库的导出结果json) <requestHandler name="/update" class="solr.JsonUp ...
- MySQL update select组合
update t_news inner join (select readCount from t_news t2 where t2.id=1) t1 set t_news.readCount = t ...
- jQuery的事件处理方法
.on()方法用来处理事件 $("li").on("click",function(){ $(this).addClass("complete&quo ...
- java的编码问题详解
ucenter的中文问题终于解决,这也暴露我对Java编码知识的严重不足,经过多次试验和搜索,对这块知识终于有了一个新的认识,所以把理解的内容写道这里 1:JVM的内存中字符串的编码格式是统一的吗? ...
- HUST高级软件工程--测试管理工具实践--Day1
测试管理工具实践--Day1 今天完成任务情况: 课前组好队伍,建好微信群. 课上通过老师的介绍,初步了解各种测试工具的使用情况. 课后选取了组长,在微信群经过"广泛而激烈"的讨论 ...
- Socket编程--TCP粘包问题
TCP是个流协议,它存在粘包问题 产生粘包的原因是: TCP所传输的报文段有MSS的限制,如果套接字缓冲区的大小大于MSS,也会导致消息的分割发送. 由于链路层最大发送单元MTU,在IP层会进行数据的 ...
- c 数组作为返回值注意
static char* Test() { char buf[] ="aa"; printf("%s\n",buf); return buf; } int ma ...
- nodejs nodejs模块使用及简单的示例
nodejs模块使用及简单的示例 参考菜鸟教程网:http://www.runoob.com/ 一.fs模块的使用: 1.文件操作: 读文件: //读文件 var fs=require('fs'); ...