2602 最短路径问题

时间限制: 1 s

空间限制: 32000 KB

题目等级 : 黄金 Gold

题解

题目描述 Description

平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。现在的任务是找出从一点到另一点之间的最短路径。

输入描述 Input Description

第一行为整数n。

第2行到第n+1行(共n行),每行两个整数x和y,描述了一个点的坐标。

第n+2行为一个整数m,表示图中连线的个数。

此后的m行,每行描述一条连线,由两个整数i和j组成,表示第i个点和第j个点之间有连线。

最后一行:两个整数s和t,分别表示源点和目标点。

输出描述 Output Description

仅一行,一个实数(保留两位小数),表示从s到t的最短路径长度。

样例输入 Sample Input

5

0 0

2 0

2 2

0 2

3 1

5

1 2

1 3

1 4

2 5

3 5

1 5

样例输出 Sample Output

3.41

数据范围及提示 Data Size & Hint

分类标签 Tags 点此展开

Floyd 最短路 图论

提交:codevs:http://codevs.cn/problem/2602/

思路分析:按照输入顺序建立点集,存储点的横纵坐标,图的话因为是Floyd,只能用邻接矩阵(或许是我太蒟了?orz),反正只有100个点,数组开到100*100就够了,因为只需要存储这100个点之间的关系,内存占用大约336KB,不会MLE(空间限制32M)。只有100个点,数据太小了,用FloydO(n)=100^3=1 000 000也不会TLE,关键还是以好写为主嘛。然后se都是编号,只需要在图中寻找就好了。这题关键在于处理好图与点的关系。

附:不同算法对不同图的适用性(时间复杂度以O=10^8为限,约合1s):

算法(特性)

算法复杂度

极限

Floyd(慢,适用于负边)

通值:V^3

E无关,通值:V<463

Dijkstra(不能处理负边权)

期望:V^2

最差:|E|+|V|log|V|

E, N均有关,期望:V<9999 最差:V<9998

SPFA(对于稠密图退化为Bellman - Ford算法)

期望:kEk为常数,常见为2)最差:|V|*|E|

V, E均有关,期望:V<5^7 最差:V<463

注:可以生成数据专门卡SPFA,如超稠密图、网格图等等,此时k会变得非常大,SPFA算法非常慢(|V|*|E|,等同于Floyd)。所以说SPFA算法是一种非常不稳定的算法(想要推翻前述观点请证明k的取值范围)。以下为维基百科原话:

以下是构建数据以破坏该算法的方法(不使用队列优化)。假设要求从顶点1到顶点n的最短路径。然后,我们可以用1i<n的小随机权重来添加边(ii + 1)(因此最短路径应为1-2 -...n),并随机添加4n个其他重边。对于这种情况,所谓的SPFA算法将非常慢。

附:两篇国家队论文,供有能力并且有兴趣的同学看看,内容主要是对于最短路算法优化的讨论(感谢jbyyym两位前辈!):

SPFA算法的优化及应用(by jby)

https://wenku.baidu.com/view/9e1231126edb6f1aff001f25.html

最短路算法及其应用(by yym)

https://wenku.baidu.com/view/7b2134c30c22590102029d27.html

(当然省选阶段前卡SPFA算法的题目是很少的,但还是要熟记Dijkstra算法,毕竟是一种十分稳定的算法,并且堆优化后跑得很快。要注意数据范围,大数据直接上SPFA;数据在10^4数量级上,保险起见还是用Dijkstra算法。)

代码(如果看不清楚就调整缩放比例到150%吧):

来一波数据黑一下SPFA

(I). 数据

1000 999000

1 2 1

1 3 1

1 1000 1

2 1 1

999 1000 1

1 1000

 

(数据量:10.2M)

(II). 实测:

略,这是SPFA的最差情况——完全图。

codevs 2602 最短路径问题——良心题解的更多相关文章

  1. Codevs 2602 最短路径问题

     时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间. ...

  2. codevs 2602 最短路径问题x

                         题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间.其中的一些点之间有连线.若有连线,则表示 ...

  3. codevs 1814 最长链题解

    codevs 1814 最长链题解 题目描述 Description 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根. 输入描述 Input Descripti ...

  4. code vs 2602 最短路径问题

    题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间.其中的一些点之间有连线.若有连线,则表示可从一个点到达另一个点,即两点间有通路,通 ...

  5. 2602 最短路径问题Dihstra算法

    题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间.其中的一些点之间有连线.若有连线,则表示可从一个点到达另一个点,即两点间有通路,通 ...

  6. 洛谷 1373 dp 小a和uim之大逃离 良心题解

    洛谷 1373 dp 这题还不算太难,,当初看的时候不是很理解题意,以为他们会选择两条不同的路径,导致整体思路混乱 传送门 其实理解题意和思路之后还是敲了不短的时间,一部分身体原因再加上中午休息不太好 ...

  7. BZOJ1876:[SDOI2009]SuperGCD——C++高精度良心题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1876 Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数 ...

  8. CCF-CSP认证 C++题解目录

    持续更新中,记录刷题过程并分享一下小小的心得总结. 试题编号 试题名称 标签 202006-1 线性分类器 | 题解 线性规划 202006-2 稀疏向量| 题解 归并排序思想 202006-3 化学 ...

  9. 【第41套测试题NOIP2007】【排序】【DP】【高精度】【树】【图上路径】

    先说点题外话,这两天的入学考试,炸了……语文有史以来最差,数学有史以来最差……还有4科,估计全炸……悲痛的心情,来调程序.这套题是8.31考的,从昨天晚上开始改的,因为第三题迟迟不想写,才拖到了现在. ...

随机推荐

  1. HDU 4514

    真是神奇,G++TLE,C++500MS... 判环有一个图论知识就是,m>=n时必有环.如果以m的范围建图,会MLE. 然后,利用拓扑排序再来判定是否有环,因为有些景点可能是孤立的.同时,在拓 ...

  2. Verilog堵塞赋值与非堵塞赋值

    verilog设计进阶 时间:2014年5月6日星期二 主要收获: 1.堵塞赋值与非堵塞赋值: 2.代码測试: 3.组合逻辑电路和时序逻辑电路. 堵塞赋值与非堵塞赋值: 1.堵塞赋值"=&q ...

  3. 保护眼睛-eclipse黑色背景设置

    eclipse中java编辑器颜色改动,适合程序员人群: 长时间编码,眼睛是有非常大负担的,特别是使用eclipse,它自带的java编辑器背景色是刺眼的白色.代码颜色基本是黑色,这样一个编辑器里白色 ...

  4. oc35--自定义构造方法

    // // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property int ag ...

  5. hdu1150——最小点覆盖

    As we all know, machine scheduling is a very classical problem in computer science and has been stud ...

  6. 洛谷P3809 后缀数组模板

    题目:https://www.luogu.org/problemnew/show/P3809 刚学了后缀数组,看人家手写演示了半天,大概明白了过程,但完全写不出来代码: 于是借鉴了许多,不过都差不多, ...

  7. Django day02

    一:Django 中 app 的概念 每个项目里面都会 有很多不同的模块,我们可以把它们写在一个项目里,我们把模块分成一个一个不同的app,这样写可以便于管理,写的一些项目也可能不单单是一个页面,还可 ...

  8. CMake之CMakeLists.txt编写入门

    自定义变量 主要有隐式定义和显式定义两种. 隐式定义的一个例子是PROJECT指令,它会隐式的定义< projectname >_BINARY_DIR和< projectname & ...

  9. wap网测一道题目

    1. 给定一个字符串s, 1 <= len(s) <= 3000, 定义odd palindrome string为长度为奇数的回文串, 求s中该奇回文串的个数. 比如axbcba , 结 ...

  10. CSS中的五大字体家族(cursive 手写字体族更吸引我)

    这是CSS中的五大字体家族. serifserif 中文翻译为“衬线字体族”.serif 具有末端加粗.扩张或尖细末端,或以实际的衬线结尾的一类字体.可以看出 serif 总是在文字末端做文章,这样做 ...