find the safest road

                                                                          Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Problem Description
XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1 间的实数(包括0,1),一条从u 到 v 的通道P 的安全度为Safe(P) = s(e1)*s(e2)…*s(ek) e1,e2,ek是P 上的边 ,现在8600 想出去旅游,面对这这么多的路,他想找一条最安全的路。但是8600 的数学不好,想请你帮忙 ^_^
Input
输入包括多个测试实例,每个实例包括:
第一行:n。n表示城市的个数n<=1000;
接着是一个n*n的矩阵表示两个城市之间的安全系数,(0可以理解为那两个城市之间没有直接的通道)
接着是Q个8600要旅游的路线,每行有两个数字,表示8600所在的城市和要去的城市
Output
如果86无法达到他的目的地,输出"What a pity!",
其他的输出这两个城市之间的最安全道路的安全系数,保留三位小数。
Sample Input
  
3 1 0.5 0.5 0.5 1 0.4 0.5 0.4 1 3 1 2 2 3 1 3
Sample Output
  
0.500 0.400 0.500

题意:

有n个城市,每个城市之间都有路相连,其中每条路都有一个安全系数,从某个城市到另一个城市的总的安全系数等于所经过的路的安全系数之和,求一条最安全的路

思路:

dijkstra,求两城市之间边权的乘积最大的路线即可。注意从当前城市到当前城市安全系数为1.000,此外可能还要注意一下小数处理

代码:

#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <vector>using namespace std;
const double eps = 1e-14;class Graph
{
public:int n;double **tu;double *dist;bool *vis;Graph(int _n){n = _n;tu = new double*[n];vis = new bool[n];dist = new double[n];for(int i=0; i<n; i++)tu[i] = new double[n];for(int i=0; i<n; i++){for(int j=0; j<n; j++)tu[i][j] = 0;}}~Graph(){for(int i=0; i<n; i++)delete []tu[i];delete []tu;delete []vis;delete []dist;}void dijkstra(int startt){for(int i=0; i<n; i++){dist[i] = 0;vis[i] = false;}dist[startt] = 1;for(int i=0; i<n; i++){int tag;double min_dist = 0;for(int j=0; j<n; j++){if(!vis[j] && dist[j] > min_dist){min_dist = dist[j];tag = j;}}vis[tag] = true;for(int j=0; j<n; j++){if(min_dist*tu[tag][j] - dist[j] > eps)dist[j] = min_dist * tu[tag][j];}}return;}};int main(){int n;while(scanf("%d", &n)!=EOF){Graph g(n);for(int i=0; i<n; i++)for(int j=0; j<n; j++){scanf("%lf", &g.tu[i][j]);}int cnt, a, b;scanf("%d", &cnt);while(cnt--){scanf("%d%d", &a, &b);if(a==b){printf("1.000\n");continue;}g.dijkstra(a-1);if(g.dist[b-1]==0)printf("What a pity!\n");elseprintf("%.3lf\n", g.dist[b-1]);}}return 0;
}

hdu1596 find the safest road(dijkstra求最短路)相关推荐

  1. ~~朴素dijkstra算法 (搜索与图论)(附模板题AcWing 849. Dijkstra求最短路 I)

    模板 时间复杂是 O(n2+m), n表示点数,m 表示边数 int g[N][N]; // 存储每条边 int dist[N]; // 存储1号点到每个点的最短距离 bool st[N]; // 存 ...

  2. 图论入门(一),拓扑排序生成拓扑序列与Dijkstra求最短路

    基本知识 Dijkstra基本思想 拓扑排序思维视频讲解 848:有向图的拓扑排序 题目链接 题解: #include<bits/stdc++.h> using namespace std ...

  3. AcWing 850. Dijkstra求最短路 II

    原题链接:AcWing 850. Dijkstra求最短路 II 给定一个 n 个点 m 条边的有向图,图中可能存在 重边 和 自环 ,所有边权均为 非负值 . 请你求出 1 号点到 n 号点的最短距 ...

  4. AcWing 850. Dijkstra求最短路 II【最短路】【堆优化版Dijkstra】

    AcWing 850. Dijkstra求最短路 II 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 850. Dijkstra求 ...

  5. 堆优化版dijkstra算法:AcWing 850. Dijkstra求最短路 II

    堆优化版dijkstra算法分析: 朴素版dijkstra的时间复杂度为O(n^2),主要瓶颈在于第1步的寻找全局最小值的过程. 可以用小根堆(C++STL priority_queue)对dist数 ...

  6. Dijkstra AcWing 850. Dijkstra求最短路 II

    Dijkstra AcWing 850. Dijkstra求最短路 II 原题链接 AcWing 850. Dijkstra求最短路 II 算法标签 最短路 Dijkstra 思路 图片摘自该题解 图 ...

  7. HDU1596 find the safest road(最短路变形,Dijkstra)

    题目: find the safest road Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  8. PAT甲级1003 Emergency:[C++题解]dijkstra求最短路、最短路条数

    文章目录 题目分析 题目链接 题目分析 分析:求单源最短路,使用dijkstra()算法. 最短路的条数,和最短路中 人数最多的一条,输出最多人数. 本题点比较少,使用邻接矩阵d[N][N]来存. a ...

  9. Dijkstra求最短路 II

    给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包 ...

最新文章

  1. tensorflow笔记 :常用函数说明
  2. 《C++入门经典(第5版•修订版)》——2.6 问与答
  3. java spring工作原理_SpringMVC的工作原理是什么样的,跟Spring的关系是怎么样的?
  4. cocos2dX之一——安卓环境搭建
  5. [19/06/07-星期五] CSS基础_布局定位背景样式
  6. STM32F103C8T6单片机IAP升级
  7. Echarts多条折线可拖拽
  8. [php] 表单注意事项
  9. 设置vim默认显示行号
  10. 移动通信原理学习笔记之一
  11. 轻松斩断信息安全黑手!就这?
  12. r5驱动 索尼exmor_为画质插上翅膀 详解索尼Exmor R CMOS
  13. 自定义控件1_切换按钮
  14. Java 给PDF文档设置背景颜色和背景图片
  15. 如何用python画出一般函数图_python如何画函数图像
  16. 濮阳工学院2019计算机大赛二等奖,学习 | 第三届校长奖学金10名入围奖人选,看看都有谁?!...
  17. Linux Mint TLP设置
  18. 错误处理 宏 c语言,C语言零基础教程之预处理和宏定义篇
  19. Imagine— 让图片再小一点点
  20. java和js中遍历数组和对象的总结

热门文章

  1. 血液代谢组学炎症相关的线粒体功能失调慢加急性肝衰竭的潜在机制
  2. 【已解决】微信公众号如何主动给用户发消息
  3. input禁止输入的方法
  4. 天大2021年秋学期考试《市场营销学》离线作业考核试题
  5. Excel实现序列反向互补
  6. 【ROS】ros抽取图像帧
  7. 应用级监控系统建设概述
  8. 3.18调查问卷第六题说明
  9. 深入浅出!微信小程序的事件处理,顺利通过阿里Android岗面试
  10. 粉末冶金制品压制机器c语言编程,粉末冶金制品压制机控制.doc