POJ_2253 Frogger 【最短路变形】

一、题目

 Frogger

二、分析

 题意关键点就是那个青蛙距离。就是所有1到2的点的路径中,每条路径都可以确定一个最大值,这个最大值就是青蛙要跳的青蛙距离,然后要求这个青蛙距离最小值。

 其实就是最短路的变形,用dijkstra,原先求最短路的时候是每次确定当前最小距离的点,那么,这题只需要每次确定一个当前最有值就可以了,易证,队列后面的值是不会有更小了的。

三、AC代码

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <queue>
 6 #include <fstream>
 7 using namespace std;
 8 #define INF 0x3f3f3f3f
 9 typedef pair<double, int> P;
10 const int MAXN = 2e2 + 14;
11 struct point
12 {
13     int x, y;
14 }node[MAXN];
15 struct cmp
16 {
17     bool operator()(const P &a, const P &b)
18     {
19         return a.first > b.first;
20     }
21 };
22 int n;
23 double G[MAXN][MAXN];
24 double dist[MAXN];
25 bool flag[MAXN];
26
27 void Dijkstra(int s)
28 {
29     priority_queue<P, vector<P>, cmp> pq;
30     memset(dist, 0, sizeof(dist));
31     memset(flag, 0, sizeof(flag));
32     pq.push(P(0, 1));
33     while( !pq.empty() )
34     {
35         P t = pq.top();
36         pq.pop();
37         int v = t.second;
38         if(flag[v])
39             continue;
40         flag[v] = 1;
41         dist[v] = t.first;
42         for(int i = 1; i <= n; i++)
43         {
44             if(!flag[i])
45             {
46                 double m = max(dist[v], G[v][i]);
47                 pq.push(P(m, i));
48             }
49         }
50     }
51
52 }
53
54
55 double calc(point a, point b)
56 {
57     double ans;
58     double x = a.x - b.x;
59     double y = a.y - b.y;
60     ans = sqrt(x*x + y*y);
61     return ans;
62 }
63
64
65 int main()
66 {
67     //freopen("in.txt", "r", stdin);
68     int Case = 1;
69     while(scanf("%d", &n) != EOF)
70     {
71         if(n == 0)
72             break;
73         if(Case != 1)
74             puts("");
75         for(int i = 1; i <= n; i++)
76         {
77             scanf("%d%d", &node[i].x, &node[i].y);
78         }
79         for(int i = 1; i <= n; i++)
80         {
81             for(int j = i+1; j <= n; j++)
82             {
83                 G[i][j] = calc(node[i], node[j]);
84                 G[j][i] = G[i][j];
85             }
86             G[i][i] = 0;
87         }
88         Dijkstra(1);
89         printf("Scenario #%d\n", Case++);
90         printf("Frog Distance = %.3f\n", dist[2]);
91     };
92     return 0;
93 }

原文地址:https://www.cnblogs.com/dybala21/p/10959131.html

时间: 2024-10-14 14:11:33

POJ_2253 Frogger 【最短路变形】的相关文章

POJ2253 Frogger —— 最短路变形

题目链接:http://poj.org/problem?id=2253 Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 49409   Accepted: 15729 Description Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who is sitting on a

URAL 1934 Black Spot --- 简单最短路变形

边权为1,在维护最短路的同时维护p值最小,我直接存的(1-p),即不遇见的概率,要使得这个值最大. #include <iostream> #include <cstdlib> #include <cstring> #include <string> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #includ

UESTC 915 方老师的分身II --最短路变形

即求从起点到终点至少走K条路的最短路径. 用两个变量来维护一个点的dis,u和e,u为当前点的编号,e为已经走过多少条边,w[u][e]表示到当前点,走过e条边的最短路径长度,因为是至少K条边,所以大于K条边的当做K条边来处理就好了.求最短路的三个算法都可以做,我这里用的是SPFA,比较简洁. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #incl

zoj 1655 Transport Goods (最短路变形)

Transport Goods Time Limit: 2 Seconds      Memory Limit: 65536 KB The HERO country is attacked by other country. The intruder is attacking the capital so other cities must send supports to the capital. There are some roads between the cities and the

zoj1655 最短路变形

题意:HERO过的首都需要货物,需要从其他的城市吧货物送到首都,每条道路都会需要消耗一定比例的货物,问最多能送多少货物到首都. 思路:如果每个点的比例是1,到达首都的比例就是经过的路径的(1-消耗比)的乘积,反正是无向的,所以可以反过来推,首都的货物比是1,而到达每座 城市的货物就是所经过的路径(1-消耗比)的乘积,则由此可见,我们可以求首都到任意城市的最大比值:最后把每个点的最大比值乘以每个点的货物加起来 即是结果. #include<stdio.h> #include<string.

HN0I2000最优乘车 (最短路变形)

HN0I2000最优乘车 (最短路变形) [试题]为了简化城市公共汽车收费系统,某城市决定对大部分的公共汽车都采用一票制,但由于某些公共汽车所经过的停车站太多和路途太长,就采用两票或多票制.经过这种票制改革后,人们坐公共汽车从一个站到另一个站时,就不得不选择一个好的乘车方案,以使他们的乘车费用最低. 为了方便于求出最佳的乘车方案,我们假设: l  采用一票制的公共汽车,无论从哪个站上车到那个站下车,乘该公共汽车的费用为1(费用单位). l  采用多票制的公共汽车,将设立某些站为关键站:那么,如果

POJ 1797 Heavy Transportation (最短路变形)

Heavy Transportation Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 20364   Accepted: 5401 Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand business. But he needs a clever man

HDOJ find the safest road 1596【最短路变形】

find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9033    Accepted Submission(s): 3173 Problem Description XX星球有非常多城市,每一个城市之间有一条或多条飞行通道,可是并非全部的路都是非常安全的,每一条路有一个安全系数s,s是在 0 和

HDU 4318 图论之最短路变形

点击打开链接 题意:看样例说把,一共4个点,接下来输入一个数,代表当前点连接的点的数量,然后那几个点,样例里面就是1->2消耗50%的能量,1->3消耗70%的能量,2->1消耗30%的能量,2->4消耗20%的能量,一次类推,最后一行输入起始位置,重点位置,开始时的能量,问从起点走到终点,消耗的能量最少. 思路:很明显的最短路变形,我们可以将求出从起点到终点剩余的最多的能量,用总能量减去它,就是消耗的最少的能量,这就好办了,将最短路改成最长路即可,但是每次比较时就是比较乘积而不是

UVA - 10537 The Toll! Revisited (最短路变形逆推)

Description Problem G Toll! Revisited Input: Standard Input Output: Standard Output Time Limit: 1 Second Sindbad the Sailor sold 66 silver spoons to the Sultan of Samarkand. The selling was quite easy; but delivering was complicated. The items were t