hdu1690 Bus System (dijkstra)
The bus system of City X is quite strange. Unlike other city’s system, the cost of ticket is calculated based on the distance between the two stations. Here is a list which describes the relationship between the distance and the cost.
Your neighbor is a person who is a really miser. He asked you to help him to calculate the minimum cost between the two stations he listed. Can you solve this problem for him?
To simplify this problem, you can assume that all the stations are located on a straight line. We use x-coordinates to describe the stations’ positions.
Each case contains eight integers on the first line, which are L1, L2, L3, L4, C1, C2, C3, C4, each number is non-negative and not larger than 1,000,000,000. You can also assume that L1<=L2<=L3<=L4.
Two integers, n and m, are given next, representing the number of the stations and questions. Each of the next n lines contains one integer, representing the x-coordinate of the ith station. Each of the next m lines contains two integers, representing the start point and the destination.
In all of the questions, the start point will be different from the destination.
For each case,2<=N<=100,0<=M<=500, each x-coordinate is between -1,000,000,000 and 1,000,000,000, and no two x-coordinates will have the same value.
1 2 3 4 1 3 5 7
4 2
1
2
3
4
1 4
4 1
1 2 3 4 1 3 5 7
4 1
1
2
3
10
1 4
The minimum cost between station 1 and station 4 is 3.
The minimum cost between station 4 and station 1 is 3.
Case 2:
Station 1 and station 4 are not attainable.
- #include<stdio.h>
- const long long INF = 99999999999LL;
- __int64 map[105][105],node[105];
- int n,s[105];
- __int64 abs(__int64 a)
- {
- return a>0?a:-a;
- }
- void set_1()
- {
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=n;j++)
- map[i][j]=INF;
- }
- }
- void set_2()
- {
- for(int i=1;i<=n;i++)
- {
- s[i]=0; node[i]=INF;
- }
- }
- __int64 dijkstra(int stra,int end)
- {
- int tstra=stra;
- __int64 min;
- s[stra]=1; node[stra]=0;
- for(int k=2;k<=n;k++)
- {
- min=INF;
- for(int i=1;i<=n;i++)
- if(s[i]==0)
- {
- if(node[i]>map[tstra][i]+node[tstra])
- node[i]=map[tstra][i]+node[tstra];
- if(min>node[i])
- {
- min=node[i]; stra=i;
- }
- }
- s[stra]=1; tstra=stra;
- if(s[end])
- break;
- }
- if(node[end]==INF)
- return -1;
- return node[end];
- }
- int main()
- {
- int t,m,k=1,cas[505][2];
- __int64 l[5],c[5],posit[105],dist;
- scanf("%d",&t);
- while(t--)
- {
- for(int i=1;i<=4;i++)
- scanf("%I64d",&l[i]);
- for(int i=1;i<=4;i++)
- scanf("%I64d",&c[i]);
- scanf("%d%d",&n,&m);
- for(int i=1;i<=n;i++)
- scanf("%I64d",&posit[i]);
- set_1();
- for(int i=1;i<=n;i++)
- for(int j=i+1;j<=n;j++)
- {
- dist=abs(posit[i]-posit[j]);
- if(dist<=l[1])
- map[i][j]=map[j][i]=c[1];
- else if(dist<=l[2])
- map[i][j]=map[j][i]=c[2];
- else if(dist<=l[3])
- map[i][j]=map[j][i]=c[3];
- else if(dist<=l[4])
- map[i][j]=map[j][i]=c[4];
- }
- printf("Case %d:\n",k++);
- __int64 cost;
- for(int i=1;i<=m;i++)
- {
- scanf("%d%d",&cas[i][0],&cas[i][1]);
- set_2();
- cost=dijkstra(cas[i][0],cas[i][1]);
- if(cost!=-1)
- printf("The minimum cost between station %d and station %d is %I64d.\n",cas[i][0],cas[i][1],cost);
- else
- printf("Station %d and station %d are not attainable.\n",cas[i][0],cas[i][1]);
- }
- }
- }
hdu1690 Bus System (dijkstra)的更多相关文章
- hdu1690 Bus System(最短路 Dijkstra)
Problem Description Because of the huge population of China, public transportation is very important ...
- hdu 1690 Bus System(Dijkstra最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1690 Bus System Time Limit: 2000/1000 MS (Java/Others ...
- HDU ACM 1690 Bus System (SPFA)
Bus System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 1690 Bus System (有点恶心)
Problem Description Because of the huge population of China, public transportation is very important ...
- hdu 1690 Bus System (最短路径)
Bus System Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU 1690 Bus System
题目大意:给出若干巴士不同价格的票的乘坐距离范围,现在有N个站点,有M次询问,查询任意两个站点的最小花费 解析:由于是多次查询不同站点的最小花费,所以用弗洛伊德求解 时间复杂度(O^3) 比较基础的弗 ...
- Bus System(Flody)
http://acm.hdu.edu.cn/showproblem.php?pid=1690 坑爹的题,必须用__int64 %I64d(以前没用过) 因为这题的数据特别大,所以用-1 #includ ...
- Chrysler -- CCD (Chrysler Collision Detection) Data Bus
http://articles.mopar1973man.com/general-cummins/34-engine-system/81-ccd-data-bus CCD (Chrysler Coll ...
- Bus Pass
ZOJ Problem Set - 2913 Bus Pass Time Limit: 5 Seconds Memory Limit: 32768 KB You travel a lot b ...
随机推荐
- Qt 多线程 详细函数说明及其事例
转:http://www.cnblogs.com/hicjiajia/archive/2011/02/03/1948955.html Qt线程类 Qt 包含下面一些线程相关的类:QThread 提供了 ...
- PHPCMS V9数据库配置文件database.php位置
初次用PHPCMS V9的朋友可能找不到数据库配置文件,其实在官方的wiki中已经介绍了.那就是 caches\configs\database.php 文件. 初次用PHPCMS V9的朋友可能找不 ...
- perl post 请求带参数
my $url='https://wenjinbao.winfae.com/business/dispatch_post.do?action=submitAdminLogin'; my $res ...
- oracle维护表空间和数据文件
1:重要参考 wiki 2: oracle doc 表空间参考 3:来自dba-oracle的参考 26,27,28,29 一:oracle 表空间概念 表空间是联系数据库的物理磁盘(数据文件)和逻辑 ...
- 日本IT工作有感
不知不觉,在日本关西已经呆了快一个月了. 除了饮食有点不是非常习惯.其他感觉都还好. 日本这边的文化还是非常偏向project师的,project师的社会地位非常高,公司里面也没有国内所谓35岁的焦虑 ...
- 【MongoDB】在windows平台下搭建mongodb的分片集群(二)
在上一片博客中我们讲了Mongodb数据库中分片集群的主要原理. 在本篇博客中我们主要讲描写叙述分片集群的搭建过程.配置分片集群主要有两个步骤.第一启动全部须要的mongod和mongos进程. 第二 ...
- 获取字符宽度:并非自适应。coretext去计算
获取字符宽度:并非自适应.coretext去计算 UniChar ch = [ns_str characterAtIndex:0]; CGGlyph glyph = 0; CTFontGetGlyph ...
- Ace of Aces
Description There is a mysterious organization called Time-Space Administrative Bureau (TSAB) in the ...
- 【安卓】eclipse中不可错过的几个秘密、!
1.PackageExplorer显示文件层次的默认方式是平行列出全部包,事实上也可显示成多级,并且效果比navigator好多了. PackageExplorer视图中,"右上角箭头→pa ...
- MFC消息映射的原理:笔记
多态的实现机制有两种,一是通过查找绝对位置表,二是查找名称表:两者各有优缺点,那么为什么mfc的消息映射采用了第二种方法,而不是c++使用的第一种呢?因为在mfc的gui类库是一个庞大的继承体系,而里 ...