SSL-ZYC 1624 小萨的烦恼
2018-01-11 16:06
211 查看
题目大意:
小萨要从第一个点走到地m个点,有些点可以走,而有些点却不能走。每一条路所需要的时间为2*这条路的距离,其中可以选择任意一条路“加速”到时间只要这条路的距离。请问能否在t的时间内回到第一个点?
思路:
这道题就是一个最短路径问题,我们把从i到j不加速的最少时间记为f[i][j][1],加速的时间为f[i][j][2],则最终判断f[i][j][2]*2(要往返)是否小于t即可。
代码:
小萨要从第一个点走到地m个点,有些点可以走,而有些点却不能走。每一条路所需要的时间为2*这条路的距离,其中可以选择任意一条路“加速”到时间只要这条路的距离。请问能否在t的时间内回到第一个点?
思路:
这道题就是一个最短路径问题,我们把从i到j不加速的最少时间记为f[i][j][1],加速的时间为f[i][j][2],则最终判断f[i][j][2]*2(要往返)是否小于t即可。
代码:
#include <iostream> #include <cstdio> using namespace std; int f[101][101][3],a[101][101],n,m,t; 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]); if (a[i][j]==0) a[i][j]=9999999; f[i][j][1]=a[i][j]*2; //初始化 f[i][j][2]=a[i][j]; //初始化 } for (int k=1;k<=n;k++) for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) { f[i][j][1]=min(f[i][k][1]+f[k][j][1],f[i][j][1]); f[i][j][2]=min(f[i][k][2]+f[k][j][1],f[i][j][2]); f[i][j][2]=min(f[i][k][1]+f[k][j][2],f[i][j][2]); //寻找最短路径 } if (f[1][m][2]*2>t) printf("You are day dreaming!"); //输出 else printf("%d\n",f[1][m][2]*2); return 0; }
相关文章推荐
- 小萨的烦恼【SSL 1624】
- (ssl1624)小萨的烦恼
- SSL1624小萨的烦恼
- 文章标题 SSL1624 小萨的烦恼
- 小萨的烦恼-SSL 1624
- (ssl 1624)小萨的烦恼
- 【SSLGZ 1624】小萨的烦恼
- SSL-ZYC 1616 1762 工厂的烦恼
- SSL-ZYC 1612 最优布线问题
- SSL-ZYC 作业
- SSL-ZYC 2576 平台
- 小萨的烦恼
- SSL-ZYC 1760 商店选址问题
- SSL-ZYC 小麦高度
- SSL-ZYC 2574 Closest
- 小萨的烦恼
- SSL-ZYC 手机
- SSL-ZYC 懒惰的奶牛①
- SSL-ZYC 1125 集合
- SSL-ZYC 2575 给出字符串