codevs 2602 最短路径问题——良心题解
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 点此展开
提交:codevs:http://codevs.cn/problem/2602/
思路分析:按照输入顺序建立点集,存储点的横纵坐标,图的话因为是Floyd,只能用邻接矩阵(或许是我太蒟了?orz),反正只有100个点,数组开到100*100就够了,因为只需要存储这100个点之间的关系,内存占用大约336KB,不会MLE(空间限制32M)。只有100个点,数据太小了,用Floyd过O(n)=100^3=1 000 000也不会TLE,关键还是以好写为主嘛。然后s和e都是编号,只需要在图中寻找就好了。这题关键在于处理好图与点的关系。
附:不同算法对不同图的适用性(时间复杂度以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算法) |
期望:kE(k为常数,常见为2)最差:|V|*|E| |
与V, E均有关,期望:V<5^7 最差:V<463 |
注:可以生成数据专门卡SPFA,如超稠密图、网格图等等,此时k会变得非常大,SPFA算法非常慢(|V|*|E|,等同于Floyd)。所以说SPFA算法是一种非常不稳定的算法(想要推翻前述观点请证明k的取值范围)。以下为维基百科原话:
“
以下是构建数据以破坏该算法的方法(不使用队列优化)。假设要求从顶点1到顶点n的最短路径。然后,我们可以用1≤i<n的小随机权重来添加边(i,i + 1)(因此最短路径应为1-2 -...n),并随机添加4n个其他重边。对于这种情况,所谓的SPFA算法将非常慢。
”
附:两篇国家队论文,供有能力并且有兴趣的同学看看,内容主要是对于最短路算法优化的讨论(感谢jby与yym两位前辈!):
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 最短路径问题——良心题解的更多相关文章
- Codevs 2602 最短路径问题
时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间. ...
- codevs 2602 最短路径问题x
题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间.其中的一些点之间有连线.若有连线,则表示 ...
- codevs 1814 最长链题解
codevs 1814 最长链题解 题目描述 Description 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根. 输入描述 Input Descripti ...
- code vs 2602 最短路径问题
题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间.其中的一些点之间有连线.若有连线,则表示可从一个点到达另一个点,即两点间有通路,通 ...
- 2602 最短路径问题Dihstra算法
题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间.其中的一些点之间有连线.若有连线,则表示可从一个点到达另一个点,即两点间有通路,通 ...
- 洛谷 1373 dp 小a和uim之大逃离 良心题解
洛谷 1373 dp 这题还不算太难,,当初看的时候不是很理解题意,以为他们会选择两条不同的路径,导致整体思路混乱 传送门 其实理解题意和思路之后还是敲了不短的时间,一部分身体原因再加上中午休息不太好 ...
- BZOJ1876:[SDOI2009]SuperGCD——C++高精度良心题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1876 Description Sheng bill有着惊人的心算能力,甚至能用大脑计算出两个巨大的数 ...
- CCF-CSP认证 C++题解目录
持续更新中,记录刷题过程并分享一下小小的心得总结. 试题编号 试题名称 标签 202006-1 线性分类器 | 题解 线性规划 202006-2 稀疏向量| 题解 归并排序思想 202006-3 化学 ...
- 【第41套测试题NOIP2007】【排序】【DP】【高精度】【树】【图上路径】
先说点题外话,这两天的入学考试,炸了……语文有史以来最差,数学有史以来最差……还有4科,估计全炸……悲痛的心情,来调程序.这套题是8.31考的,从昨天晚上开始改的,因为第三题迟迟不想写,才拖到了现在. ...
随机推荐
- 高仿京东APP首页“京东快报”自己主动向上滚动的广告条
转载请标明出处: http://blog.csdn.net/hai_qing_xu_kong/article/details/51013562 本文出自:[顾林海的博客] 前言 上次在京东APP上买东 ...
- android 用java代码设置布局、视图View的宽度/高度或自适应
在achat项目中,对话内容的长宽设置为自适应.可是假设文本内容太多,则宽度几乎相同布满,若自己说的和对方说的都非常多内容.则满屏都是文字.则不easy分辨出是来自别人说的还是自己说的.那么须要对本身 ...
- Apache server配置
Apacheserver在我们生活中非经常常使用 今天给大家将一下mac 下apache server的配置 这对程序来说是必备技能之中的一个,假设我们在公司开发都是用的公司的server 将自己的代 ...
- 从头认识Spring-2.7 自己主动检測Bean(1)-@Component @Repository @Service @Controller
这一章节我们来讨论一下自己主动检測Bean. 1.domain 厨师类: package com.raylee.my_new_spring.my_new_spring.ch02.topic_1_19; ...
- hdu 4768 异或运算
http://acm.hdu.edu.cn/showproblem.php?pid=4768 貌似非常多人是用的二分 可是更好的做法貌似还是异或 对于第k个人.假设他接到偶数个传单.那么异或的结果还是 ...
- Extjs4,form提交时emptyText传值问题
在Extjs4中,form提交时,文本框的emptyText会传到后台,比如 上图中的“请选择”这样的文本会作为值传到后台. 解决方法: form提交时配置 submitEmptyText: fal ...
- BNUOJ ->Borrow Classroom(LCA)
B. Borrow Classroom Time Limit: 5000ms Memory Limit: 262144KB 每年的BNU校赛都会有两次赛前培训,为此就需要去借教室,由于SK同学忙于出题 ...
- 套接字(socket)与socket 编程
字节序: 主机字节序(host byte order):不同的主机有不同的字节序,x86:小端: 网络字节序(network byte order):大端字节序: 0. 什么是套接字 套接字是网络进程 ...
- es6入门6--数组拓展运算符,Array.from()基本用法
本文只是作为ES6入门第九章学习笔记,在整理知识点的同时,会加入部分个人思考与解答,若想知道更详细的介绍,还请阅读阮一峰大神的ES6入门 一.拓展运算符 ES6中新增了拓展运算(...)三个点,它的作 ...
- ArrayList 扩容原理
面试中经常问到的问题之一就是List的扩容机制了,他是怎么做到扩容的,大家都能答出来底层是数组,复制一个数组来扩容,但是再具体一点来说,大家就不知道该怎么说了,如果不看源码说这么多确实就差不多了,但是 ...