157. [USACO Nov07] 奶牛跨栏(第三次考试大整理)

157. [USACO Nov07] 奶牛跨栏

   输入文件:hurdles.in   输出文件:hurdles.out   简单对比
时间限制:1 s   内存限制:128 MB

译 by CmYkRgB123

描述

Farmer John 想让她的奶牛准备郡级跳跃比赛,贝茜和她的伙伴们正在练习跨栏。她们很累,所以她们想消耗最少的能量来跨栏。

显然,对于一头奶牛跳过几个矮栏是很容易的,但是高栏却很难。于是,奶牛们总是关心路径上最高的栏的高度。

奶牛的训练场中有 N (1 ≤ N ≤ 300) 个站台,分别标记为1..N。所有站台之间有M (1 ≤ M ≤ 25,000)条单向路径,第i条路经是从站台Si开始,到站台Ei,其中最高的栏的高度为Hi (1 ≤ Hi ≤ 1,000,000)。无论如何跑,奶牛们都要跨栏。

奶牛们有 T (1 ≤ T ≤ 40,000) 个训练任务要完成。第 i 个任务包含两个数字 Ai 和 Bi (1 ≤ Ai ≤ N; 1 ≤ Bi ≤ N),表示奶牛必须从站台Ai跑到站台Bi,可以路过别的站台。奶牛们想找一条路径从站台Ai到站台Bi,使路径上最高的栏的高度最小。

你的任务就是写一个程序,计算出路径上最高的栏的高度的最小值。

输入

  • 行 1: 两个整数 N, M, T
  • 行 2..M+1: 行 i+1 包含三个整数 Si , Ei , Hi
  • 行 M+2..M+T+1: 行 i+M+1 包含两个整数,表示任务i的起始站台和目标站台: Ai , Bi

输出

  • 行 1..T: 行 i 为一个整数,表示任务i路径上最高的栏的高度的最小值。如果无法到达,输出 -1。

输入样例

5 6 3

1 2 12

3 2 8

1 3 5

2 5 3

3 4 4

2 4 8

3 4

1 2

5 1

输出样例

4

8

-1

思路

此题是真的很水,就是裸的Floyd 

但是需要注意的是:

需要在求最短路径的时候取一下最大值!

    min(max(i-k,k-j),i-j);

这道题考试的时候连看都没看,,因为选做三个,这是最后一个,所以说一定要规划好做什么题做哪些题,自己擅长什么就先做什么,先把大致的题目看一下,然后再做,吃亏了。。。。

考试后打的代码(floyd):

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #define M 1005
 5 #define maxn 0x7fffffff
 6 
 7 using namespace std;
 8 
 9 int map[M][M];
10 int n,m,q,x,y,w;
11 
12 int main()
13 {
14     //freopen("hurdles.in","r",stdin);
15     //freopen("hurdles.out","w",stdout);
16     cin>>n>>m>>q;
17     for(int i=1;i<=n;i++)
18       for(int j=1;j<=n;j++)
19         map[i][j]=maxn;
20     for(int i=1;i<=m;i++)
21     {
22         scanf("%d%d%d",&x,&y,&w);
23         map[x][y]=w;
24     }
25     for(int k=1;k<=n;k++)
26       for(int i=1;i<=n;i++)
27         for(int j=1;j<=n;j++)
28         {
29             if(map[i][k]!=maxn&&map[k][j]!=maxn&&(map[i][j]>map[i][k])&&(map[i][j]>map[k][j]))
30             map[i][j]=max(map[i][k],map[k][j]);
31         }
32     for(int i=1;i<=q;i++)
33     {
34         scanf("%d%d",&x,&y);
35         if(map[x][y]!=maxn)
36         printf("%lld\n",map[x][y]);
37         else 
38         printf("-1");
39     }
40     //fclose(stdin);
41     //fclose(stdout);
42     return 0;
43 }

 

转载于:https://www.cnblogs.com/zxqxwnngztxx/p/6730976.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值