HDOJ 1596 find the safest road(最短路)

2023-12-13 19:48
文章标签 短路 find 1596 road hdoj safest

本文主要是介绍HDOJ 1596 find the safest road(最短路),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



find the safest road

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 11945    Accepted Submission(s): 4246


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

Author
ailyanlu

Source
HDU 2007-Spring Programming Contest - Warm Up (1)

思路:

最短路的理解性好题。

AC CODE:DIJK

#include<stdio.h>
#include<cstring>
#include<algorithm>
#define HardBoy main()
#define ForMyLove return 0;
using namespace std;
const int MYDD = 1103;
const double Eps = 0.0;int n;
bool vis[MYDD];
double m[MYDD][MYDD], dis[MYDD];
void Dijk(int Began, int End) {memset(vis, 0, sizeof(vis));vis[Began] = 1;for(int j = 1; j <= n; j++)dis[j] = m[Began][j];for(int i = 1; i <= n; i++) {double Tp = Eps;int k = Began;for(int j = 1; j <= n; j++) {//*bug -> for(int j = 1; j <= End; j++)if(!vis[j] && dis[j] > Tp) {Tp = dis[j];k = j;}}vis[k] = 1;for(int j = 1; j <= n; j++) {if(!vis[j] && dis[j] < dis[k] * m[k][j])/*符号!*/dis[j] = dis[k] * m[k][j];}}
//	for(int j = 1; j <= n; j++) {
//		printf("dis[%d] -> %lf\n", j,dis[j]);
//	}if(dis[End] == 0.0)   puts("What a pity!");/*What a pity!*/else	printf("%.3lf\n", dis[End]);
}int HardBoy {while(scanf("%d", &n) != EOF) {for(int j = 1; j <= n; j++)for(int k = 1; k <= n; k++)m[j][k] = Eps;//初始化for(int j = 1; j <= n; j++)for(int k = 1; k <= n; k++)scanf("%lf", &m[j][k]);int q;scanf("%d", &q);while(q--) {int Began, End;scanf("%d %d", &Began, &End);if(Began == End)  puts("1.000");else	Dijk(Began, End);}}ForMyLove
}

超时 code:floyd

#include<stdio.h>
#include<cstring>
#include<algorithm>
#define HardBoy main()
#define ForMyLove return 0;
using namespace std;
const int MYDD = 1103;int n;
double m[MYDD][MYDD];
void Floyd() {for(int k = 1; k <= n; k++) {for(int i = 1; i <= n; i++) {for(int j = 1; j <= n; j++) {if(m[i][j] < m[i][k]*m[k][j])m[i][j] = m[i][k]*m[k][j];}}}
}int HardBoy {while(scanf("%d", &n), n) {for(int j = 1; j <= n; j++)for(int k = 1; k <= n; k++)m[j][k] = 0.0;for(int j = 1; j <= n; j++)for(int k = 1; k <= n; k++) {scanf("%lf", &m[j][k]);}Floyd();int q, b, e;scanf("%d", &q);while(q--) {scanf("%d %d", &b, &e);if(b == e)  puts("1.000");else if(m[b][e] != 0) printf("%.3lf\n", m[b][e]);else puts("What a pity!");}}ForMyLove
}


这篇关于HDOJ 1596 find the safest road(最短路)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/489747

相关文章

【Linux系列】find命令使用与用法详解

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 java 核心技术,jvm,并发编程 redis,kafka,Spring,微服务等常用开发工具系列:常用的开发工具,IDEA,M

BFS:解决多源最短路问题

文章目录 什么是多源最短路问题?1.矩阵2.飞地的数量3.地图的最高点4.地图分析总结 什么是多源最短路问题? 多源最短路问题(Multi-Source Shortest Path Problem,MSSP)是图论中的一个经典问题,它的目标是在给定图中找到从多个源点到所有其他顶点的最短路径。这个问题可以视为单源最短路问题(Single-Source Shortest Pa

Leetcode 3195. Find the Minimum Area to Cover All Ones I

Leetcode 3195. Find the Minimum Area to Cover All Ones I 1. 解题思路2. 代码实现 题目链接:3195. Find the Minimum Area to Cover All Ones I 1. 解题思路 这一题还是挺简单的,只要找到所有1所在的元素的上下左右4个边界,作为目标矩形的四个边即可。 2. 代码实现 给出python

「Debug R」报错unable to find an inherited method for function是如何产生的

在一个群里看到这样一条报错,截图如下: 报错信息 当然这种问题解决起来也很快,无非就是把报错信息复制出来放在搜索引擎上,只不过你要挑选合适的搜索引擎。 百度 谷歌 必应 解决方案就是用dplyr::select。 虽然报错解决了,但是我还想着要重复出这个报错。因为只有能重复出报错,才能证明你不是运气好才解

最短路算法总结(dijkstra,flyod,bellmanford,spfa)

总结 d i j k s t r a dijkstra dijkstra h e a p − d i j k s t r a heap-dijkstra heap−dijkstra b e l l m a n f o r d bellmanford bellmanford s p f a spfa spfa f l o y d floyd floyd最短路类型单源单源单源单源全源数据维护 e

道路 Road(百练,POJ)

题目链接: 1724 -- ROADS (poj.org) 题目描述: 思路: 这题目乍一看,是一个含有2个标尺的单源最短路问题,挺难处理的。 既然没法直接用最短路处理,那我们就“记录信息”,将花费的时间也记录进dp数组,然后跑“状态最短路”。 用f[i][j] 表示到达点i 且 总花费时间为j的最短距离,然后跑堆优化的dijkstra算法就好。由于不含有负边权,因此可以搞一个vis数

[leetcode] 515. Find Largest Value in Each Tree Row

Find Largest Value in Each Tree Row 描述 You need to find the largest value in each row of a binary tree. Example: Input: 1/ \3 2/ \ \ 5 3 9 Output: [1, 3, 9] 我的代码 简单的dfs。 要使

BFS 解决最短路问题

例题一 解法(bfs 求最短路): 算法思路: 利⽤层序遍历来解决迷宫问题,是最经典的做法。我们可以从起点开始层序遍历,并且在遍历的过程中记录当前遍历的层数。这样就能在找到出⼝的时候,得到起点到出⼝的最短距离。 例题二 解法: 算法思路: 如果将「每次字符串的变换」抽象成图中的「两个顶点和⼀条边」的话,问题就变成了「边权为

cmake find_package 原理简介以及使用说明

下面简单介绍Cmake 如何使用find_package命令对外部库进行查找: cmake本身不提供任何关于搜索库的便捷方法,也不会对库本身的环境变量进行设置。它仅仅是按照优先级顺序在指定的搜索路径进行查找Findxxx.cmake文件和xxxConfig.cmake文件(其中xxx代表库的名字,特别注意的是有大小写之分),这两个文件大体上是没有区别的,cmake能够找到这两个文件中的任何一个,

Webstorm vue项目@路径不能跳转到对应资源,提示Cannot find declaration to go to

Webstorm vue项目@路径不能跳转到对应资源,提示Cannot find declaration to go to 我们 ctrl加鼠标左键点击方法会失效,看了网上很多教程在说需要在此处配置一下webpack.config.js的文件路径,而且指向了node_modules\@vue\cli-service\webpack.config.js 我试了好多次,不行,不论对错,这里