(ssl 1624)小萨的烦恼#floyd#

题目

若小萨他们不能在限定时间内赶回学校,那么输出You are day dreaming!
否则,输出一个整数,为他们所需要花费的最少时间。


分析

所以这是一道求最短路径的题目(主要是不直接连通,坐车要和走路配套
虽然可以用dijkstra(幸好没拼错
但是floyd简洁!!


代码(floyd)

#include <cstdio>
#include <algorithm>
using namespace std;
int ans,n,t,m,a[101][101][2];
int main(){
	scanf("%d%d%d",&n,&t,&m);
	for (int i=1;i<=n;i++)
	for (int j=1;j<=n;j++){
	scanf("%d",&a[i][j][1]);
	if (!a[i][j][1]) a[i][j][1]=1000000000;
	a[i][j][0]=a[i][j][1]*2;
	}
	for (int k=1;k<=n;k++)
	for (int i=1;i<=n;i++)
	for (int j=1;j<=n;j++)
	if (i!=j)
	{
		a[i][j][1]=min((long long)a[i][j][1],min((long long)a[i][k][1]+a[k][j][0],(long long)a[i][k][0]+a[k][j][1]));//前面走路,后面走路,保留原值
		a[i][j][0]=min((long long)a[i][j][0],(long long)a[i][k][0]+a[k][j][0]);
	}
	ans=2*a[1][m][1];//来回
	if (ans<=t) printf("%d",ans); else printf("You are day dreaming!");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值