码迷,mamicode.com
首页 > 其他好文 > 详细

[2016-04-16][URAL][2069][Hard Rock]

时间:2016-04-16 21:21:28      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

  • 时间:2016-04-16 20:26:11 星期六

  • 题目编号:[2016-04-16][URAL][2069][Hard Rock]

  • 题目大意:给定一个n*m的格子,每个格子的边带有一定的权值,同行或者同列的边权值一样,问从左上角到右下角的所有路径中,最小边权最大值是多少?

  • 分析:

    • 对于起点,要么横着走,要么竖着走,对于终点,要么横着走到,要么竖着走到,所以所有路径如下图
      技术分享
    • 对于1,2两条路径很显然,直接取边权的最小值
    • 对于3,4的路径
      • 首先两边的路的一定的,中间的路不确定,
      • 最优的情况,中间的路径只需要选择从最上到最下,边权最大的边即可,因为如果中途又走了其他竖直方向的路,边权只能更小
    • 综上,答案就是4种情况耳朵最大值
  • 遇到的问题:

    • 刚开始看题目,直接Dijkstra,写完发现点的数目有105×105个,然后呵呵,
  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. const int maxn = 1E5 + 10;
  5. int a[maxn],b[maxn];
  6. int main(){
  7. int n,m;
  8. scanf("%d%d",&n,&m);
  9. int aa =0,bb = 0;
  10. for(int i = 0 ; i < n ; ++i){
  11. scanf("%d",&a[i]);
  12. aa = max(aa, a[i]);
  13. }
  14. for(int j = 0 ; j < m ; ++j){
  15. scanf("%d",&b[j]);
  16. bb = max(bb,b[j]);
  17. }
  18. int t1 = min(min(b[0] , b[m - 1]),aa);
  19. int t2 = min(min(a[0],a[n - 1]),bb);
  20. int t3 = min(a[0],b[m - 1]);
  21. int t4 = min(b[0],a[n - 1]);
  22. printf("%d\n",max(t1,max(t2,max(t3,t4))));
  23. return 0;
  24. }




[2016-04-16][URAL][2069][Hard Rock]

标签:

原文地址:http://www.cnblogs.com/qhy285571052/p/08495e30acae15b137107c4021748a97.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!