Subway

POJ-2502

  • 这里除了直接相连的地铁站,其他图上所有的点都要连线,这里是走路的速度。
  • 记住最后的结果需要四舍五入,否则出错。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<vector>
#include<queue>
#include<cmath>
#include<map>
using namespace std;
typedef pair<int,int> p;
const int INF=0x3f3f3f3f;
int sx,sy,ex,ey;
struct edge{
int to;
double cost;
int next;
};
struct node{
double dis;
int to;
node(){}
node(int a,int b):dis(a),to(b){}
bool operator<(const node& t)const{
return dis>t.dis;
}
};
edge ma[1500005];
int head[220];
int top;//指向头结点
double d[220];
int tn;//结点个数
int n=220;//最大结点数
map<pair<int,int>,int> mmap;
map<int,pair<int,int> >mmap1;
void addedge(int a,int b,double c){
ma[top].to=b;
ma[top].cost=c;
ma[top].next=head[a];
head[a]=top;
top++;
}
void dijikstra(int s){
priority_queue<node> que;
for(int i=0;i<tn;i++){
d[i]=INF;
}
d[s]=0;
que.push(node(0,s));
while(!que.empty()){
node temp=que.top();
que.pop();
int v=temp.to;
if(d[v]<temp.dis)
continue;
for(int h=head[v];h!=-1;h=ma[h].next){
edge e=ma[h];
if(d[e.to]>d[v]+e.cost){
d[e.to]=d[v]+e.cost;
que.push(node(d[e.to],e.to));
}
}
}
}
bool isnode(int x,int y){
if(!mmap.count(p(x,y))){
mmap1[tn]=p(x,y);
mmap[p(x,y)]=tn++;
return true;
}else return false;
}
double G[220][220];
int main(){
memset(head,-1,sizeof(head));
top=0;
scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
mmap1[tn]=p(sx,sy);
mmap[p(sx,sy)]=tn++;//0
mmap1[tn]=p(ex,ey);
mmap[p(ex,ey)]=tn++;//1
int x,y;
while(scanf("%d%d",&x,&y)!=EOF){
int nx,ny;
if(!mmap.count(p(x,y))){
mmap1[tn]=p(x,y);
mmap[p(x,y)]=tn++;
}
while(scanf("%d%d",&nx,&ny)!=EOF&&(nx!=-1||ny!=-1)){
if(!mmap.count(p(nx,ny))){
mmap1[tn]=p(nx,ny);
mmap[p(nx,ny)]=tn++;
}
double distance=sqrt((nx-x)*(nx-x)+(ny-y)*(ny-y));
distance/=40000.0;
int ttn=mmap[p(nx,ny)];
int ttnp=mmap[p(x,y)];
addedge(ttn,ttnp,distance);
addedge(ttnp,ttn,distance);
G[ttn][ttnp]=distance;
G[ttnp][ttn]=distance;
x=nx,y=ny;
}
}
for(int i=0;i<tn;i++){
for(int j=0;j<tn;j++){
if(G[i][j]==0&&i!=j){
p p1=mmap1[i];
sx=p1.first,sy=p1.second;
p p2=mmap1[j];
ex=p2.first,ey=p2.second;
double distance1=sqrt((ex-sx)*(ex-sx)+(ey-sy)*(ey-sy));
distance1/=10000.0;
addedge(i,j,distance1);
G[i][j]=distance1;
}
}
}
dijikstra(0);
int final=d[1]*60.0+0.5;
cout<<final<<endl;
//system("pause");
return 0;
}

POJ-2502(Dijikstra应用+最短路)的更多相关文章

  1. POJ 2502 Subway (最短路)

    Subway 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/L Description You have just moved ...

  2. (poj 2502) Subway 最短路

    题目链接: 题意:在一个城市里有许多地铁,现在你知道每条地铁的起点  终点与停站点的坐标,知道我们的起始坐标与终点坐标,问加上走路最快到达终点的时间是多少? 方法:求出任意两点的车速时间与步行时间,再 ...

  3. POJ 2502 - Subway Dijkstra堆优化试水

    做这道题的动机就是想练习一下堆的应用,顺便补一下好久没看的图论算法. Dijkstra算法概述 //从0出发的单源最短路 dis[][] = {INF} ReadMap(dis); for i = 0 ...

  4. POJ 2502 Subway / NBUT 1440 Subway / SCU 2186 Subway(图论,最短距离)

    POJ 2502 Subway / NBUT 1440 Subway / SCU 2186 Subway(图论,最短距离) Description You have just moved from a ...

  5. POJ 3635 - Full Tank? - [最短路变形][手写二叉堆优化Dijkstra][配对堆优化Dijkstra]

    题目链接:http://poj.org/problem?id=3635 题意题解等均参考:POJ 3635 - Full Tank? - [最短路变形][优先队列优化Dijkstra]. 一些口胡: ...

  6. POJ 2502 最短路

    http://poj.org/problem?id=2502 同一条地铁线上的站点相邻点间按照v2建边,然后所有点之间按照v1更新建边,所有的边都是双向边,both directions. 然后直接跑 ...

  7. POJ 2502 Subway-经过预处理的最短路

    Description You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. Instead of ...

  8. POJ 2502 Subway ( 最短路 && 最短路建图 )

    题意 : 给出二维平面上的两个点代表起点以及终点,接下来给出若干条地铁线路,除了在地铁线路上行进的速度为 40km/h 其余的点到点间都只能用过步行且其速度为 10km/h ,现问你从起点到终点的最短 ...

  9. Subway POJ - 2502 最短路

    题意:给出地铁线  起点和 终点  坐地铁速度为v2  走路为v1 求起点到终点的最短距离  (答案需要四舍五入这里坑了好久) 拿给出的地铁站点 和起点终点建边即可  然后跑个迪杰斯特拉 #inclu ...

  10. POJ 2502 【思维是朴素的最短路 卡输入和建图】

    题意: 给出两个坐标,分别是小明家和小明学校的坐标. 给出多条地铁线,给出每站的坐标,已知地铁是双向的,每条线以-1 -1结尾. 给出地铁速度,步行速度. 地铁线可看成是顺次连接的线段. 求小明从家到 ...

随机推荐

  1. 【uva 1395】Slim Span(图论--最小生成树+结构体快速赋值 模版题)

    题意:给一个N(N<=100)个点的联通图(无自环和平行边),求苗条度(最大边-最小边的值)尽量小的生成树. 解法:枚举+Kruskal.先从小到大排序边,枚举选择的最小的边. 1 #inclu ...

  2. 【noi 2.6_90】滑雪(DP)

    题意:输出最长下降路径的长度. 解法:f[i][j]表示结尾于(i,j)的最长的长度.由于无法确定4个方位已修改到最佳,所以用递归实现. 1 #include<cstdio> 2 #inc ...

  3. python的re模块一些方法 && Tkinter图形界面设计 && 终止python运行函数 && python读写文件 && python一旦给字符串赋值就不能单独改变某个字符,除非重新给变量赋值

    Tkinter图形界面设计见:https://www.cnblogs.com/pywjh/p/9527828.html#radiobutton 终止python运行函数: 采用sys.exit(0)正 ...

  4. hdu4533 威威猫系列故事——晒被子

    Problem Description 因为马拉松初赛中吃鸡腿的题目让不少人抱憾而归,威威猫一直觉得愧对大家,这几天他悄悄搬到直角坐标系里去住了. 生活还要继续,太阳也照常升起,今天,威威猫在第一象限 ...

  5. Educational Codeforces Round 91 (Rated for Div. 2) A. Three Indices (模拟)

    题意:有一长度为\(n\)的序列,问是否能找到\(a_{i}<a_{j},a_{j}>a_{k},(i<j<k)\),如果满足,输出其位置. 题解:直接暴力两头找即可,最坏复杂 ...

  6. requests -- Python

    使用requests方法后,会返回一个response对象,其存储了服务器响应的内容:如下r表示get请求后的响应对象r = requests.get('http://hz.58.com/sale.s ...

  7. 2.Url重定向和重写

    虚拟地址===>真实地址映射(搜索引擎优化,抽象能力,防盗链) 之前:IIS重写模块规则,Apache mod_Rewrite.Nginx上的URL重写. 现在:通过中间件来实现. 重定向与重写 ...

  8. ArcMobile的CoordinateCollection在逆时针添加点时自动调整节点顺序的问题

    为了使用ArcMobile实现量测功能,LZ自定义了一个MapGraphicLayer用于绘图,代码如下: using System.Drawing; using ESRI.ArcGIS.Mobile ...

  9. Codeforces13C–Sequence (区间DP)

    题目大意 给定一个含有N个数的序列,要求你对一些数减掉或者加上某个值,使得序列变为非递减的,问你加减的值的总和最少是多少? 题解 一个很显然的结果就是,变化后的每一个值肯定是等于原来序列的某个值,因为 ...

  10. C++ part6.5

    1.虚函数表建立和虚函数表指针初始化 虚拟函数表是在编译期就建立了,各个虚拟函数这时被组织成了一个虚拟函数的入口地址的数组.而虚函数表指针是在运行期,也就是构造函数被调用时进行初始化的,这是实现多态的 ...