zz's Mysterious Present

Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1652    Accepted Submission(s): 371

Problem Description
There
are m people in n cities, and they all want to attend the party which
hold by zz. They set out at the same time, and they all will choose the
best way they think, but due to someone take a ride, someone drive, and
someone take a taxi, they have different speed. Can you find out who
will get zz's mysterious present? The first one get the party will get
the present . If there are several people get at the same time, the one
who stay in the city which is farther from the city where is zz at
begin will get the present. If there are several people get at the same
time and the distance from the city he is at begin to the city where zz
is, the one who has the larger number will get the present.
 
Input
The
first line: three integers n, m and k. m is the total number of the
people, and n is the total number of cities, and k is the number of the
way.(0<n<=300, 0<m<=n, 0<k<5000)
The second line to
the (k+1)th line: three integers a, b and c. There is a way from a to
b, and the length of the way is c.(0<a,b<=n, 0<c<=100)
The (k+2)th line: one integer p(0<p<=n), p is the city where zz is.
The (k+3)th line: m integers. the ith people is at the place p[i] at begin.(0<p[i]<=n)
The (k+4)th line: m integers. the speed of the ith people is speed[i];(0<speed[i]<=100)
All the ways are directed.
 
Output
For each case, output the one who get the present in one line. If no one can get the present, output "No one".
 
Sample Input
3 1 3
1 2 2
1 3 3
2 3 1
3
2
1
 
Sample Output
1
 
Author
李光霞
题意: 有m个人,要到同一个地方(s)去获得一件东西,每个人都有个初始城市,每条边都是单向边,每个人都有个初始速度,要获得那件礼物的条件是:以到达时间最短者获胜,如果时间一样,那么则按照到s的距离,距离远者获胜,如果上诉条件都相同,那么编号大的人获得礼物.
题解:首先肯定是将边全部反向,然后以s点作为源点来进行最短路.求完最短路之后只要判断m个人所在的城市是否至少有一个<INF,不然都不可达,,我开始每想清,所有的城市
都去判断了,WA了好久.
AC代码:
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
const double eps = 1e-;
const int N = ;
const int INF = ;
int graph[N][N];
int p[N];
int speed[N];
int n,m,k;
int low[N];
bool vis[N];
double result[N];
int dijkstra(int s){
for(int i=;i<=n;i++){
low[i] = graph[s][i];
vis[i] = false;
}
low[s] = ;
vis[s] = true;
for(int i=;i<n;i++){
int Min = INF;
for(int j=;j<=n;j++){
if(Min>low[j]&&!vis[j]){
Min = low[j];
s = j;
}
}
vis[s] = true;
for(int j=;j<=n;j++){
if(low[j]>low[s]+graph[s][j]&&!vis[j]){
low[j] = low[s]+graph[s][j];
}
}
}
int flag = false;
///这里只要判断m个人就行了..
for(int i=;i<=m;i++){
if(low[p[i]]<INF) flag =true;
}
if(!flag) return INF;
int id = ;
for(int i=;i<=m;i++){
result[i] = low[p[i]]*1.0/speed[i];
if(result[id]>result[i]) id = i;
else if(fabs(result[id]-result[i])<eps){
if(low[p[id]]<=low[p[i]]) id = i;
}
}
return id;
}
int main()
{
while(scanf("%d%d%d",&n,&m,&k)!=EOF){
for(int i=;i<=n;i++){
for(int j=;j<=n;j++) {
if(i==j) graph[i][j] = ;
else graph[i][j] = INF;
}
}
for(int i=;i<k;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
graph[b][a] = min(c,graph[b][a]); ///全部反向
}
int s;
scanf("%d",&s);
for(int i=;i<=m;i++){
scanf("%d",&p[i]);
}
for(int i=;i<=m;i++){
scanf("%d",&speed[i]);
}
int id = dijkstra(s);
if(id>=INF) printf("No one\n");
else printf("%d\n",id);
}
}

hdu 2145(迪杰斯特拉)的更多相关文章

  1. hdu 1142(迪杰斯特拉+记忆化搜索)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  2. HDU 3339 In Action(迪杰斯特拉+01背包)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3339 In Action Time Limit: 2000/1000 MS (Java/Others) ...

  3. HDU 2544最短路 (迪杰斯特拉算法)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2544 最短路 Time Limit: 5000/1000 MS (Java/Others)    Me ...

  4. HDU 3790(两种权值的迪杰斯特拉算法)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3790 最短路径问题 Time Limit: 2000/1000 MS (Java/Others)    ...

  5. HDU 1874畅通工程续(迪杰斯特拉算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)     ...

  6. hdu 1595 find the longest of the shortest(迪杰斯特拉,减去一条边,求最大最短路)

    find the longest of the shortest Time Limit: 1000/5000 MS (Java/Others)    Memory Limit: 32768/32768 ...

  7. hdu 3339 In Action(迪杰斯特拉+01背包)

    In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  8. HDU 2680 最短路 迪杰斯特拉算法 添加超级源点

    Choose the best route Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  9. hdu 1874 畅通工程续(迪杰斯特拉优先队列,floyd,spfa)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

随机推荐

  1. pycharm配置Git托管

    利用Pycharm和github管理代码转载https://www.cnblogs.com/feixuelove1009/p/5955332.html git教程--廖雪峰git教程  转载https ...

  2. 使用virtualbox安装的Ubuntu,窗口分辨率过小,使用增强工具完成和vmtools一样的功能。

    今天用VirtualBox成功装上Ubuntu10.04之后发现了一个问题:默认情况下 ubuntu 的分辨率最高只能设到800*600.但是对于自己的大显示器,在分辨率800*600的ubuntu窗 ...

  3. 2017 United Kingdom and Ireland Programming(Gym - 101606)

    题目很水.睡过了迟到了一个小时,到达战场一看,俩队友AC五个了.. 就只贴我补的几个吧. B - Breaking Biscuits Gym - 101606B 旋转卡壳模板题.然后敲错了. 代码是另 ...

  4. angular用$sce服务来过滤HTML标签

    angular js的强大之处之一就是他的数据双向绑定这一牛B功能,我们会常常用到的两个东西就是ng-bind和针对form的ng-model.但在我们的项目当中会遇到这样的情况,后台返回的数据中带有 ...

  5. day18 js 正则,UI框架,Django helloworld 以及完整工作流程

    JS正则:    text     判断字符串是否符合规定的正则表达式    exec    获取匹配的数据   默认情况下: 只要能匹配到就返回true 否则返回false 只匹配数字:   所以J ...

  6. 移动Web应用程序开发HTML5篇

    https://software.intel.com/zh-cn/blogs/2012/03/09/webhtml5-offline-web-applications

  7. leetcode 【 Merge k Sorted Lists 】python 实现

    题目: Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexit ...

  8. 简单实现nodejs爬虫工具

    约30行代码实现一个简单nodejs爬虫工具,定时抓取网页数据. 使用npm模块 request---简单http请求客户端.(轻量级) fs---nodejs文件模块.   index.js var ...

  9. Oracle 查看锁定对象 解锁

    一些ORACLE中的进程被杀掉后,状态被置为"killed",但是锁定的资源很长时间不释放,有时实在没办法,只好重启数据库.现在提供一种方法解决这种问题,那就是在ORACLE中杀不 ...

  10. [问题解决]docker启动不了

    问题描述:昨天下午整合了同事的代码,发现docker启动好后,docker ps查看不到,docker ps -a发现docker容器没有启动. 尝试多次启动发现都是启动不了. 经过搜索发现 http ...