POJ2502乘坐地铁上学
题目大意:给你一个二维地图,起点终点,以及多条地铁线路(只有相邻两站才可互通)中的站点坐标。步行以及坐地铁的速度;
思路:难点在于建图,一个多小时磨磨蹭蹭,都是因为思路没捋清楚~~,对于每一条地铁线,在输入站点坐标的过程中我们就可以建立图像了;输入完成后,遍历所有的点再建立,以步行为计量单位的图像。就ok啦,然后裸spfa就好了
#include <iostream>
#include <vector>
#include <string.h>
#include <algorithm>
#include <cmath>
#include <queue>
#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 2e5 + 2e2;
struct Point
{
double x,y;
Point (double x = 0.0,double y = 0.0):x(x),y(y){}
}ps[maxn];
struct node
{
int to,pre;
double v;
}edge[maxn];
double d[maxn];
int vis[maxn];
int id[maxn];
int cnt;
int nump;
void init()
{
memset(vis,0 ,sizeof(vis));
memset(id,-1,sizeof(id));
cnt = 0;
nump = 2;
}
void add(int from,int to,double v)
{
edge[cnt].to = to;
edge[cnt].v = v;
edge[cnt].pre = id[from];
id[from] = cnt++;
} double disget(int i,int j)
{
return sqrt((ps[i].x - ps[j].x) * (ps[i].x - ps[j].x) +
(ps[i].y - ps[j].y) * (ps[i].y - ps[j].y));
}
queue<int>q;
void spfa(int s)
{
q.push(s);
vis[s] = 1;
d[s] = 0;
while(q.size())
{
int now = q.front();q.pop();
vis[now] = 0;
for(int i = id[now];~i;i = edge[i].pre)
{
if(d[edge[i].to] > d[now] + edge[i].v)
{
d[edge[i].to] = d[now] + edge[i].v;
if(!vis[edge[i].to])
{
vis[edge[i].to] = 1;
q.push(edge[i].to);
}
}
}
}
}
int main()
{
init();
double x,y;
scanf("%lf%lf",&x,&y);
ps[0]=Point(x,y);
scanf("%lf%lf",&x,&y);
ps[1] = Point(x,y);
d[1] = inf;
while(~scanf("%lf%lf",&x,&y))
{
ps[nump] = Point(x,y);
d[nump++] = inf;
while(~scanf("%lf%lf",&x,&y) && x != -1 && y != -1)
{
ps[nump] = Point(x,y);
double v = disget(nump,nump-1) / (1000.0 * 40.0) * 60.0;
//cout<<v<<endl;
add(nump - 1,nump,v);
add(nump,nump - 1,v);
d[nump++] = inf;
}
}
for(int i = 0;i < nump;i++)
{
for(int j = 0;j < nump;j++)
{
double v = disget(i,j) / (1000 * 10) * 60;
//cout<<v<<endl;
add(i,j,v);
}
}
spfa(0);
printf("%d\n",int(d[1] + 0.5));
return 0;
}
POJ2502乘坐地铁上学的更多相关文章
- 团队项目成员与题目(本地地铁查询app)
		
团队名称:Daydreaming团队成员及其特点:张运涛:能快速与团队成员中的每一位进行合作,能全面考虑遇到的问题,善于总结积累.能较好的理解老师与其他人员的想法要求.刘瑞欣:做事果断,善于领导,有想 ...
 - 华为上机测试题(地铁换乘-java)
		
PS:自己写的,自测试OK,供大家参考. /* 高级题样题:地铁换乘描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的.经过的站点名分别如下,两条线交叉的换乘点用T1.T2表示.编写 ...
 - AcWing   157. 树形地铁系统   (hash判断树同构)打卡
		
一些主要城市拥有树形的地铁系统,即在任何一对车站之间,有且只有一种方式可以乘坐地铁. 此外,这些城市大多数都有一个中央车站. 想象一下,你是一名在拥有树形地铁系统的城市游玩的游客,你想探索该城市完整的 ...
 - Subway POJ 2502
		
题目链接: http://poj.org/problem?id=2502 题目大意: 你刚从一个安静的小镇搬到一个吵闹的大城市,所以你不能再骑自行车去上学了,只能乘坐地铁或者步行去上学.因为你不想迟到 ...
 - 纸上谈兵: 图 (graph)
		
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 图(graph)是一种比较松散的数据结构.它有一些节点(vertice),在某些节 ...
 - 将.dat文件导入数据库
		
*最近在搞文本分类,就是把一批文章分成[军事].[娱乐].[政治]等等. 但是这个先需要一些样本进行训练,感觉文本分类和"按图索骥"差不多,训练的文章样本就是"图&quo ...
 - (原创)通用查询实现方案(可用于DDD)[附源码] -- 设计思路
		
[声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3988592.html). [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...
 - (原创)通用查询实现方案(可用于DDD)[附源码] -- 简介
		
[声明] 写作不易,转载请注明出处(http://www.cnblogs.com/wiseant/p/3985353.html). [系列文章] 通用查询实现方案(可用于DDD)[附源码] -- ...
 - viewport ——视区概念,为 自适应网页设计
		
什么是Viewport 手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机 ...
 
随机推荐
- STC-51开发板-单片机控制数码管&按键&点阵综合操作
			
操作: 实现按下一个按键,对应的数码管和点阵显示相应的数字 代码: /* *******************数码管按键综合项目********************* */ #include ...
 - Ansible Playbook Variables
			
虽然自动化存在使得更容易使事情重复,但所有的系统可能不完全一样. 在某些系统上,您可能需要设置一些与其他操作略有不同的行为或配置. 此外,一些观察到的远程系统的行为或状态可能需要影响如何配置这些系统. ...
 - Mysql 中json 相关函数的使用
			
1.JSON_LENGTH: select content from test1 ["1","2","3","4",&q ...
 - with as (转)
			
sql with as 用法(适用sqlserver,好像oracle也适用) Server 2005中提供了公用表表达式(CTE),使用CTE,可以使SQL语句的可维护性,同时,CTE要比表变量的效 ...
 - ubuntu部署jenkins
			
https://www.cnblogs.com/lozz/p/9962316.html 1.安装 wget -q -O - https://pkg.jenkins.io/debian/jenkins- ...
 - jQuery html5Validate基于HTML5表单验证插件
			
更新于2016-02-25 前面提到的新版目前线上已经可以访问: http://mp.gtimg.cn/old_mp/assets/js/common/ui/Validate.js demo体验狠狠地 ...
 - 19-Javaweb项目读取本地图片通过虚拟路径
			
有时会把文件存在本地如将图片等放在c.d盘等,在javaweb引用时会出现无法直接访问的问题,但是还是有办法解决的. 可以通过配置虚拟路径: 步骤一: 双击servers下面的tomcat, 在弹出的 ...
 - discuz的diy功能介绍
			
可以通过页面操作的方式,完成页面布局设计,数据聚合,样式等常见的页面处理功能. 以管理员登陆discuz的前台时,会出现一个diy按钮. 流程,先设计框架,再完成数据的聚合. 定义模板时, ...
 - Tortoise SVN 使用笔记
			
最近一个项目,团队使用的是SVN来控制版本,所以顺便学习下SVN的知识.在Windows上,肯定是用图形化客户端Tortoise SVN在加速我们的工作. 首先,在一个准备用在工作目录的文件夹下,点击 ...
 - sql转化为时间戳
			
1.转化为时间戳 UNIX_TIMESTAMP():执行使用时间格式如:2009-08-06 10:10:40 .2009-08-06