题目
若小萨他们不能在限定时间内赶回学校,那么输出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;
}