By the Underground or by Foot?

Time limit: 1.0 second
Memory limit: 64 MB
Imagine yourself in a big city. You want to get from point A to point B.
To do that you may move by foot or use the underground. Moving by the
underground is faster but you may enter and exit it only at the
stations. To save your time you decided to write a program to find the
fastest route.

Input

The
first line contains two floating point numbers. First of them is the
speed of traveling by foot. The second one is the speed of traveling by
the underground. The second speed is always greater than the first one.
Then description of the underground follows. It starts with an integer number N in the first line. It is the number of the underground stations. You may assume that N is not greater than 200. The following N lines contain two floating point numbers each (i-th line contains the coordinates of i-th
station). Then the description of the connections between stations
follows. Each connection is determined by the pair of integers, i.e. by
the numbers of connected stations. The list of connections is terminates
with a pair of zeroes. We assume that all the connections are straight.
So the time we need to travel between stations is equal to the distance
between stations divided by the speed of traveling by the underground.
It
should be mentioned also that entering and exiting the underground and
changing trains are possible at the stations only and takes no time.
At last the coordinates of the points A and B are given, tha pair of coordinates in a line.

Output

The first line should contain the minimal time needed to get from the point A to the point B. Time should be given with the precision of 10−6.
The second line describes the use of the underground while traveling.
It starts with the number of visited stations with tha following list of
visited stations in the order they should be visited.

Sample

input output
1 100
4
0 0
1 0
9 0
9 9
1 2
1 3
2 4
0 0
10 10
10 0
2.6346295
4 4 2 1 3
Problem Author: Alexander Klepinin
【分析】最短路,SPFA。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <time.h>
#include <string>
#include <map>
#include <stack>
#include <vector>
#include <set>
#include <queue>
#define inf 0x3f3f3f3f
#define mod 10000
typedef long long ll;
using namespace std;
const int N=;
const int M=;
int n,m,k=;
double a,b;
int vis[N],pre[N];
double w[N][N],d[N];
char str[];
bool flag=false;
struct man{
double x,y;
}point[N];
void spfa()
{
d[]=;
vis[]=;
queue<int>q;
q.push();
while(!q.empty()){
int t=q.front();q.pop();
vis[t]=;
for(int i=;i<=n+;i++){
if(d[i]>d[t]+w[t][i]){
d[i]=d[t]+w[t][i];
pre[i]=t;
if(!vis[i])q.push(i),vis[i]=;
}
}
}
}
int main() {
for(int i=;i<N;i++){
d[i]=;
for(int j=;j<N;j++){
w[i][j]=;
}
}
scanf("%lf%lf",&a,&b);
scanf("%d",&n);
int u,v; for(int i=;i<=n;i++){
scanf("%lf%lf",&point[i].x,&point[i].y);
}
while(~scanf("%d%d",&u,&v)&&u&&v){
double s=sqrt((point[u].x-point[v].x)*(point[u].x-point[v].x)+(point[u].y-point[v].y)*(point[u].y-point[v].y));
w[u][v]=w[v][u]=s/b;
}
scanf("%lf%lf%lf%lf",&point[].x,&point[].y,&point[n+].x,&point[n+].y);
for(int i=;i<=n+;i++){
for(int j=i+;j<=n+;j++){
if(w[i][j]<)continue;
double s=sqrt((point[i].x-point[j].x)*(point[i].x-point[j].x)+(point[i].y-point[j].y)*(point[i].y-point[j].y));
w[i][j]=w[i][j]=s/a;
}
}
spfa();
printf("%.7lf\n",d[n+]);
stack<int>p;
for(int i=n+;pre[i];i=pre[i]){
p.push(pre[i]);
}
printf("%d",p.size());
while(!p.empty())printf(" %d",p.top()),p.pop();
return ;
}

URAL 1205 By the Underground or by Foot?(SPFA)的更多相关文章

  1. 1205: 求一元二次方程的实数根(C)

    一.题目 acm.wust.edu.cn/problem.php?id=1205&soj=0 二.分析 一元二次方程有三个系数a.b.c,两个根x1.x2,以及d(德尔塔): a.b.c均为实 ...

  2. 1205. By the Underground or by Foot?(spfa)

    1205 简单题 有一些小细节 两个站可能不相连 但是可以走过去 #include <iostream> #include<cstdio> #include<cstrin ...

  3. URAL 1104 Don’t Ask Woman about Her Age(数论)

    题目链接 题意 : 给你一个数,未知进制,然后让你从2到36进制中找出一个最小的进制K,满足给你的这个数作为k进制时能够整除k-1. 思路 : 有一个公式,(a*b^n)mod(b-1)=a: 给定你 ...

  4. URAL 1099 Work scheduling 一般图的最大匹配 带花树算法(模板)

    R - Work scheduling Time Limit:500MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u ...

  5. URAL 1876 Centipede's Morning(数学)

    A centipede has 40 left feet and 40 right feet. It keeps a left slippers and b right slippers under ...

  6. URAL 1549 Another Japanese Puzzle(构造)

    题目大意 构造一条闭合路线,使得路线不能相交,并且走直线的步数小于等于 S,转弯(左转和右转)的步数小于等于 T.(0≤S,T≤1000) 求一条最长的路线 做法分析 注意到,因为要求路线闭合,那么转 ...

  7. URAL 1139 City Blocks(数论)

    The blocks in the city of Fishburg are of square form. N avenues running south to north and Mstreets ...

  8. URAL 1208 Legendary Teams Contest(DFS)

    Legendary Teams Contest Time limit: 1.0 secondMemory limit: 64 MB Nothing makes as old as years. A l ...

  9. URAL 1119. Metro(BFS)

    点我看题目 题意  : 这个人在左下角,地铁在右上角,由很多格子组成的地图,每一条边都是一条路,每一条边都是100米.还有的可以走对角线,问你从起点到终点最短是多少. 思路 : 其实我想说一下,,,, ...

随机推荐

  1. hadoop源码阅读

    1.Hadoop的包的功能分析 2.由于Hadoop的MapReduce和HDFS都有通信的需求,需要对通信的对象进行序列化.Hadoop并没有采用java的序列化,而是引入它自己的系统.org.ap ...

  2. VS2010下配置OCI编程

    OCI是Oracle官方出品的用于C/C++语言连接.操作Oracle数据库的API.在windows操作系统下使用VS等IDE编写.编译C++程序十分方便.简单,不需要使用Makefile.使用OC ...

  3. GPT分区基础知识及如何在GPT分区上安装WIN7

    大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘,更快速的启动win8,预装系统都采取了GPT分区 ...

  4. 学习MVC的一些随笔简单记录

    1 视图本身没有它所要显示的数据,视图的数据源始终是控制器 3 游戏的进行是模型的一部分,不是控制器的一部分 4 模型关于游戏是什么,在模型中封装游戏进行的逻辑,模型对用户界面一无所知,里面没有任何同 ...

  5. ognl表达式root中取值顺序

    不加#,先从栈顶取,如果没有(是没有这个属性而不是这个属性没有值),再往下取. 如果栈顶和非栈顶的对象拥有同一个属性名称,想直接取非栈顶的属性可以在ognl中用#root[i].属性名,可以取到属性的 ...

  6. Android中判断当前网络是否可用

    转载原文地址:http://www.cnblogs.com/renqingping/archive/2012/10/18/Net.html 当前有可用网络,如下图: 当前没有可用网络,如下图: 实现步 ...

  7. 系统的 host文件的作用

    有些用户可能已经注意到,我们在上网时除了可使用常规的 http://www.xxx.com或http://www.xxx.com.cn等形式的网站域名之外,还可以使用类似于“202.106.184.2 ...

  8. Ubuntu 14.10 下Ganglia监控Hadoop集群

    前提是已经安装好Ganglia和Hadoop集群 1 Master节点配置hadoop-metrics2.properties # syntax: [prefix].[source|sink|jmx] ...

  9. “java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Timestamp”

    最近在项目中使用hibernate查询时,总报错“java.sql.SQLException: Value '0000-00-00' can not be represented as java.sq ...

  10. 2016 - 1 -19 初探NSOperation

    一:简介 1.NSOperation的作用: 配合NSOperation与NSOperationQueue也可以实现多线程. 2.NSOperation与NSOperationQueue实现多线程的步 ...