TOJ 3692:紧急援救 最短路 dijstra

2024-03-29 13:18

本文主要是介绍TOJ 3692:紧急援救 最短路 dijstra,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

描述

 

人质被恐怖分子扣押,幸好警察已经在一些路口准备好警车随时出动,救援马上开始...
zzzz,稍安勿躁,警察需要以最少的时间到达案发现场,那应该出动哪辆警车呢?这辆警车最快需要多少时间能够到达现场呢?又幸好警方最近聘请了一位编程高手,那就是你,现在请你马上编写程序来实现。

 

输入

 

输入数据的第一行为3个整数n(n<=1000)、m(m<=10000)和s,其中n表示路口的数目,分别从1到n进行编号,m表示马路的条数,s表示案发次数。
接下来有m行,每行表示一条马路信息,每条马路信息包含起点s(路口编号)、终点e(路口编号)以及从s到e所需要的时间t,其中1<=s,e<=n,t为一个非负实数。
接下来包含s个案件,每个案件有两行,第一行为两个正整数c和k,c表示案发现场(路口编号),k表示警车的数目,第二行有k个正整数,每个正整数对应一个警车所在的路口编号。

 

输出

 

对每个案件,第一行输出:
Scenario x:
其中x表示案件的编号,从1开始。
第二行输出最快到达的时间,保留2位小数,如果无法到达则输出:
Impossible.
每个案件之后再输一个空行。

 

样例输入

6 9 2
1 2 3.5
1 3 1.2
3 4 4.9
2 4 0.221
5 4 0.1
5 6 1.3
4 6 1
2 3 0
3 2 5
4 2
1 3
5 1

6

样例输出

Scenario 1:
3.72


Scenario 2:

Impossible.

一开始用深搜写的超时了...委屈巴巴... 还是乖乖用dijstra吧。。。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<queue>
#include<vector>
using namespace std;//3692
#define inf 0x3f3f3f3f
int k,n;
double ma[1005][1005],vis[1005],dis[1005];
double minPath;
void dijstra(int begin)
{memset(vis,0,sizeof vis);int i,j,k,mi,temp;for(i=1;i<=n;i++)dis[i]=ma[begin][i];dis[begin]=0;vis[begin]=1;for(i=1;i<=n;i++){mi=inf;for(j=1;j<=n;j++){if(!vis[j]&&dis[j]<mi){mi=dis[j];temp=j;}}if(mi==inf)break;vis[temp]=1;for(k=1;k<=n;k++){if(!vis[k]&&dis[k]>dis[temp]+ma[temp][k])dis[k]=dis[temp]+ma[temp][k];}}
}   
int main()
{int m,i,j,t,x,y,ts,beg;double z;scanf("%d%d%d",&n,&m,&t);for(i=1;i<=n;i++){for(j=1;j<=n;j++)ma[i][j]=inf;}for(i=0;i<m;i++){scanf("%d%d%lf",&x,&y,&z);if(ma[x][y]>z)ma[x][y]=z;}for(i=1;i<=t;i++){double mint=inf;scanf("%d%d",&k,&ts);for(j=0;j<ts;j++){			scanf("%d",&beg);dijstra(beg);if(dis[k]<mint)mint=dis[k];			}	printf("Scenario %d:\n",i);if(mint==inf)printf("Impossible.\n");elseprintf("%.2lf\n",mint);printf("\n");}
}

 

这篇关于TOJ 3692:紧急援救 最短路 dijstra的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/858700

相关文章

BFS:解决多源最短路问题

文章目录 什么是多源最短路问题?1.矩阵2.飞地的数量3.地图的最高点4.地图分析总结 什么是多源最短路问题? 多源最短路问题(Multi-Source Shortest Path Problem,MSSP)是图论中的一个经典问题,它的目标是在给定图中找到从多个源点到所有其他顶点的最短路径。这个问题可以视为单源最短路问题(Single-Source Shortest Pa

最短路算法总结(dijkstra,flyod,bellmanford,spfa)

总结 d i j k s t r a dijkstra dijkstra h e a p − d i j k s t r a heap-dijkstra heap−dijkstra b e l l m a n f o r d bellmanford bellmanford s p f a spfa spfa f l o y d floyd floyd最短路类型单源单源单源单源全源数据维护 e

BFS 解决最短路问题

例题一 解法(bfs 求最短路): 算法思路: 利⽤层序遍历来解决迷宫问题,是最经典的做法。我们可以从起点开始层序遍历,并且在遍历的过程中记录当前遍历的层数。这样就能在找到出⼝的时候,得到起点到出⼝的最短距离。 例题二 解法: 算法思路: 如果将「每次字符串的变换」抽象成图中的「两个顶点和⼀条边」的话,问题就变成了「边权为

[HDU 5889] Barricade (最短路 + 最小割)

HDU - 5889 给定一张无向图,每条边的长度为 1 要求在 1到 N的最短路上放一些陷阱 使得 1到 N的每条最短路上至少有一个陷阱 其中在某条边上修陷阱有一个代价,求最小代价和 很显然的一个最小割 首先先用 SPFA把最短路求出来,然后依据最短路建图 然后再在新图上跑网络流即可 注意这个流量是有方向的,最短路上的反向边容量应该清零 #pragma comment(link

python中的短路计算

1. 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。 2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。 所以Python

英伟达开源 3400 亿参数模型;苹果 iOS 18 紧急 SOS 新增实时视频功能丨 RTE 开发者日报 Vol.225

开发者朋友们大家好: 这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢迎大家留言、跟帖、讨论。 本期编辑:@CY,@JLT,@鲍勃 01有话题的新闻 1、英伟达开源

图论 —— 最短路 —— Johnson 算法

【概述】 对于单源最短路来说,有时间复杂度为 O(E+VlogV) 要求权值非负的 Dijkstra,时间复杂度为 O(VE) 适用于带负权值的 Bellman Ford 对于全源最短路来说,除了时间复杂度为 O(V*V*V) 利用动态规划思想的 Floyd 算法外,可以认为是单源最短路径的推广,即分别以每个顶点为源点求其至其他顶点的最短距离 对于每个顶点利用 Ford 算法,时间复杂度为

图论 —— 最短路

【概述】 最短路是图论中十分常见的一个问题,可分为单源最短路与全源最短路。 对于单源最短路来说,有时间复杂度为 O(E+VlogV) 要求权值非负的 Dijkstra,时间复杂度为 O(VE) 适用于带负权值的 Bellman Ford 对于全源最短路来说,有时间复杂度为 O(V*V*V) 的利用动态规划思想的 Floyd 算法,时间复杂度为 O(V*E+V*V*logV) 的基于 Dijk

POJ1062 Expensive dowry 【最短路dijkstra】

详细看:http://blog.csdn.net/lyy289065406/article/details/6645852 简单说一下:每个物品是一个结点,边的权值是,edge[u][v]的值表示用物品u换物品v的价格 一开始所有物品都置为原价,即所有dist[i]为原价,用dijkstra算法,算出0点(啥物品都没有)到各点的最短距离,求出dist[1]即为花费 枚举每个物品的等级为这条交

最短路(Dijkstra算法---HDU 2544 水题 模板)

最短路 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt。但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据。每组数据第一行是两个整数N、M(N<=100,M<=10000),N表示成都的大街上有几个路口,标号为1