TOJ 3692:紧急援救 最短路 dijstra

原创 2018年04月16日 18:15:02

描述

人质被恐怖分子扣押,幸好警察已经在一些路口准备好警车随时出动,救援马上开始...
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");
		else
		printf("%.2lf\n",mint);
		printf("\n");
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TheWise_lzy/article/details/79964246

RQNOJ - PID34 紧急援救 (BFS)

很朴素的BFS WA原因:还是因为RQNOJ 的数据输入用getchar()好像会错,改成scanf(“%s”),然后因为没注意到从1开始。。。scanf("%s", &map[i]); 改成 sca...
  • u011044487
  • u011044487
  • 2014-02-18 15:27:06
  • 711

最短路(Dijstra算法)

一,问题基本概念: 最短路问题:若网络中的每条边都有一个数值(长度,时间,成本等),则找出两点(通常是源节点和阱节点)之间总权和最小的路径就是最短路问题。 单源最短路:可以采用Dijkstra算法(但...
  • juanlansexuehua
  • juanlansexuehua
  • 2017-03-04 22:29:45
  • 446

最短路知识点总结(Dijkstra,Floyd,SPFA,Bellman-Ford)

最短路知识点总结(Dijkstra,Floyd,SPFA,Bellman-Ford) Dijkstra算法: 解决的问题:     带权重的有向图上单源最短路径问题。且权重都为非...
  • qq_33406883
  • qq_33406883
  • 2016-07-20 17:55:04
  • 1602

最短路径(Floyd、Dijstra、BellmanFord)

1、迪杰斯特拉(Dijstra) 2、 弗洛伊德(Floyd) 3、 贝尔曼-福特算法(BellmanFord) 1、迪杰斯特拉(Dijstra) 算法描述 : 1)算法思想:设G=(V,E)...
  • hunyxv
  • hunyxv
  • 2017-02-03 15:49:57
  • 910

最短路的一些板子

起因是一场训练赛,这道题我和Thor拿出了正解(之一),但非常令人发指地送出了不计其数的TLE。   题干不说了,我们的做法是前向星建图,然后每个LPG(起点终点也算LPG)跑一遍SPFA,然后所有L...
  • wjfwzzc
  • wjfwzzc
  • 2014-04-03 15:11:39
  • 890

hdu2544 最短路 Dijstra算法堆优化,Bellman-Ford,Bellman-Ford队列优化

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis...
  • EventQueue
  • EventQueue
  • 2016-03-04 16:41:20
  • 684

最短路模板合集~(Dij+Floyd+Spfa)

自己整理的最短路模板,,对于最短路问题主要就是难在构图方面~~   //Dijstra void Dijstra() { int i,j; for(i=0; i...
  • secretbase_
  • secretbase_
  • 2015-04-20 11:52:29
  • 578

城市间紧急救援-多维最短路

#include #include #include #include #define INF 0x3f3f3f3f using namespace std; const int N=505;...
  • tree__water
  • tree__water
  • 2016-12-08 19:58:50
  • 151

pat L2-1. 紧急救援——dijkstra

L2-1. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一...
  • qq_27717967
  • qq_27717967
  • 2016-05-01 13:11:21
  • 1826

hdu 3832(最短路拆点)

Earth Hour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) ...
  • hexianhao
  • hexianhao
  • 2016-05-25 08:35:06
  • 250
收藏助手
不良信息举报
您举报文章:TOJ 3692:紧急援救 最短路 dijstra
举报原因:
原因补充:

(最多只允许输入30个字)