hdu1596 find the safest road(dijkstra求最短路)
find the safest road
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
第一行:n。n表示城市的个数n<=1000;
接着是一个n*n的矩阵表示两个城市之间的安全系数,(0可以理解为那两个城市之间没有直接的通道)
接着是Q个8600要旅游的路线,每行有两个数字,表示8600所在的城市和要去的城市
其他的输出这两个城市之间的最安全道路的安全系数,保留三位小数。
题意:
有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求最短路)相关推荐
- ~~朴素dijkstra算法 (搜索与图论)(附模板题AcWing 849. Dijkstra求最短路 I)
模板 时间复杂是 O(n2+m), n表示点数,m 表示边数 int g[N][N]; // 存储每条边 int dist[N]; // 存储1号点到每个点的最短距离 bool st[N]; // 存 ...
- 图论入门(一),拓扑排序生成拓扑序列与Dijkstra求最短路
基本知识 Dijkstra基本思想 拓扑排序思维视频讲解 848:有向图的拓扑排序 题目链接 题解: #include<bits/stdc++.h> using namespace std ...
- AcWing 850. Dijkstra求最短路 II
原题链接:AcWing 850. Dijkstra求最短路 II 给定一个 n 个点 m 条边的有向图,图中可能存在 重边 和 自环 ,所有边权均为 非负值 . 请你求出 1 号点到 n 号点的最短距 ...
- AcWing 850. Dijkstra求最短路 II【最短路】【堆优化版Dijkstra】
AcWing 850. Dijkstra求最短路 II 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 850. Dijkstra求 ...
- 堆优化版dijkstra算法:AcWing 850. Dijkstra求最短路 II
堆优化版dijkstra算法分析: 朴素版dijkstra的时间复杂度为O(n^2),主要瓶颈在于第1步的寻找全局最小值的过程. 可以用小根堆(C++STL priority_queue)对dist数 ...
- Dijkstra AcWing 850. Dijkstra求最短路 II
Dijkstra AcWing 850. Dijkstra求最短路 II 原题链接 AcWing 850. Dijkstra求最短路 II 算法标签 最短路 Dijkstra 思路 图片摘自该题解 图 ...
- HDU1596 find the safest road(最短路变形,Dijkstra)
题目: find the safest road Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- PAT甲级1003 Emergency:[C++题解]dijkstra求最短路、最短路条数
文章目录 题目分析 题目链接 题目分析 分析:求单源最短路,使用dijkstra()算法. 最短路的条数,和最短路中 人数最多的一条,输出最多人数. 本题点比较少,使用邻接矩阵d[N][N]来存. a ...
- Dijkstra求最短路 II
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包 ...
最新文章
- tensorflow笔记 :常用函数说明
- 《C++入门经典(第5版•修订版)》——2.6 问与答
- java spring工作原理_SpringMVC的工作原理是什么样的,跟Spring的关系是怎么样的?
- cocos2dX之一——安卓环境搭建
- [19/06/07-星期五] CSS基础_布局定位背景样式
- STM32F103C8T6单片机IAP升级
- Echarts多条折线可拖拽
- [php] 表单注意事项
- 设置vim默认显示行号
- 移动通信原理学习笔记之一
- 轻松斩断信息安全黑手!就这?
- r5驱动 索尼exmor_为画质插上翅膀 详解索尼Exmor R CMOS
- 自定义控件1_切换按钮
- Java 给PDF文档设置背景颜色和背景图片
- 如何用python画出一般函数图_python如何画函数图像
- 濮阳工学院2019计算机大赛二等奖,学习 | 第三届校长奖学金10名入围奖人选,看看都有谁?!...
- Linux Mint TLP设置
- 错误处理 宏 c语言,C语言零基础教程之预处理和宏定义篇
- Imagine— 让图片再小一点点
- java和js中遍历数组和对象的总结