题意:最短路上有一条高度限制,给起点和最大高度,求满足高度最大情况下,最短路的距离

不明白为什么枚举所有高度就不对

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<algorithm>
  4 const int maxint=999999;
  5 int c[1005][1005][2],dist[1005],H[1005];
  6 using namespace std;
  7 int n,line;
  8 int i,j,k;
  9 int st,ed,mid;
 10 int t=0;
 11 int path[1005];
 12 int visit[1005];
 13 bool dijkstra()
 14 {
 15     bool s[1005];
 16      for(int i=1;i<=n;i++)
 17      {
 18              s[i]=0;
 19              if(c[st][i][0]>=mid)
 20                   dist[i]=c[st][i][1];
 21               else dist[i]=maxint;
 22             path[i]=st;
 23      }
 24      s[st]=1;
 25      for(int i=1;i<n;i++)
 26      {
 27          int temp=maxint;
 28          int u=st;
 29            for(int j=1;j<=n;j++)
 30                  if(!s[j]&&temp>dist[j]&&c[path[j]][j][0]>=mid)
 31                  {
 32                         temp=dist[j];
 33                         u=j;
 34                  }
 35            if(temp==maxint) break;
 36            s[u]=1;
 37            if(u==ed) return true;
 38            for(int j=1;j<=n;j++)
 39                  if(!s[j]&&c[u][j][1]!=maxint&&c[u][j][0]>=mid)
 40                       if(dist[j]>dist[u]+c[u][j][1])
 41                       {
 42                                dist[j]=dist[u]+c[u][j][1];
 43                                path[j]=u;
 44                       }
 45      }
 46    return false;
 47 }
 48 int main()
 49 {
 50        #ifndef ONLINE_JUDGE
 51         freopen("1.in","r",stdin);
 52         #endif
 53     while(scanf("%d%d",&n,&line)!=EOF&&n&&line)
 54     {
 55         int tot=1;
 56         memset(H,0,sizeof(H));
 57         H[0]=0;
 58         if(t)   printf("\n");
 59         printf("Case %d:\n",++t);
 60         for(i=1;i<=n;i++)
 61             for(j=1;j<=n;j++)
 62         {
 63             c[i][j][1]=(i==j?0:maxint);
 64             c[i][j][0]=-999999;
 65         }
 66         for(i=1;i<=line;i++)
 67         {
 68             int p,q,len,h;
 69             scanf("%d%d%d%d",&q,&p,&h,&len);
 70             if(h==-1)
 71             {
 72                 c[p][q][0]=c[q][p][0]=maxint;
 73                 c[p][q][1]=c[q][p][1]=len;
 74                 continue;
 75             }
 76             if(c[p][q][0]<h)
 77             {
 78                 c[p][q][0]=c[q][p][0]=h;
 79                 c[p][q][1]=c[q][p][1]=len;
 80             }
 81         }
 82         int tall;
 83         scanf("%d%d%d",&st,&ed,&tall);
 84         /*if(st==ed)
 85         {
 86             printf("maximum height = %d\n",tall);
 87            printf("length of shortest route = 0\n");
 88            continue;
 89         }*/
 90         /*H[tot++]=tall;
 91         sort(H,H+tot);
 92         int ans=0;
 93         bool flag=0;
 94         for(i=tot-1;i>=0;i--)
 95         {
 96             if(H[i]>tall)   continue;
 97             mid=H[i];
 98             if(dijkstra())
 99             {
100                 flag=1;
101                 ans=dist[ed];
102                 break;
103             }
104         }*/
105         int first=1;
106         int ans;
107         mid=(first+tall)>>1;
108         while(first<=tall)
109         {
110             if(dijkstra())
111             {
112                 ans=dist[ed];
113                 first=mid+1;
114             }
115             else
116                 tall=mid-1;
117             mid=(first+tall)>>1;
118         }
119         if(tall==0) printf("cannot reach destination\n");
120         else
121         {
122            printf("maximum height = %d\n",tall);
123            printf("length of shortest route = %d\n",ans);
124         }
125     }
126     return 0;
127 }

转载于:https://www.cnblogs.com/cnblogs321114287/p/4454121.html

hdu 2962 最短路+二分相关推荐

  1. Luogu P1462 通往奥格瑞玛的道路(最短路+二分)

    P1462 通往奥格瑞玛的道路 题面 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己 ...

  2. 【HDU - 1839】Delay Constrained Maximum Capacity Path(最短路 + 二分)

    题干: 考虑一个包含 N 个顶点的无向图,编号从 1 到 N,并包含 M 条边.编号为 1 的顶点对应了一个矿藏,可从中提取珍稀的矿石.编号为 N 的顶点对应了一个矿石加工厂.每条边有相应的通行时间 ...

  3. Hdu 1217 最短路.cpp

    题意: 各国的汇率兑换.. 给出各国之间汇率兑换的比例,然后问你是否可以通过不断地兑换最后挣钱.. 譬如美金兑换英镑 是0.5 英镑兑换法币是 10 法币兑换美金是 0.21 所以通过1美金兑换成0. ...

  4. P1462 通往奥格瑞玛的道路[最短路+二分+堆优化]

    题目来源:洛谷 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描 ...

  5. hdu 2112 HDU Today 最短路(Dijkstra算法)

    HDU Today                                                                 Time Limit: 15000/5000 MS ...

  6. hdu 2544 最短路 (dijkstra)

    http://acm.hdu.edu.cn/showproblem.php?pid=2544 最简单的最短路了吧 改天试试优化版本的 #include<stdio.h> #include& ...

  7. HDU3143Speedy Escape 最短路+二分+搜索

    题目大意: 给出一个图,其中有一些点是出口,现在有一个罪犯有一个警察,各在两个不同的点.其中警察有一个最大速度160,问罪犯最少需要多大的速度,保证能从某个出口逃跑. 一开始看了题目没什么感觉,当将题 ...

  8. 中石油训练赛 - 小说(最短路+二分)

    题目链接:点击查看 题目大意:给出一个无环无向图,以及k,定义答案是点1到点n的任意一条路径上,所经过的所有边的权值中的第k大值,求答案的最小值.(题目是中文题面,没看懂大意可以直接去看原题目..) ...

  9. HDU 3646 DP + 二分

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=3646 题意:你有N把武器,每把武器可以对敌人造成一定的伤害(et:攻击力500,敌人血量为200,杀死敌人 ...

最新文章

  1. 蓝云公布2019云生态战略,如何解决企业上云关键问题?
  2. 组策略部署软件----将部署的软件分类
  3. AngularJS基于模块化的MVC实现
  4. 通过极简模拟框架让你了解ASP.NET Core MVC框架的设计与实现[中篇]:请求响应
  5. 网址导航html5源码图标版,最新仿hao123网址导航(晓风网址导航系统) v4.2
  6. python快乐数字怎么表达_Python经典面试题:这些面试题你会了吗?
  7. 新建SVN Repository
  8. 搜索引擎网站登录入口
  9. HG255D[OpenWrt]刷机
  10. 毕业季-Java分布式开发面试题
  11. 计算机硬盘型号怎么看,硬盘编号怎么看
  12. Dynamsoft SourceAnywhere for VSS 5.4安装配置指南
  13. 【WebGoat习题解析】Parameter Tampering-Bypass HTML Field Restrictions
  14. 世界坐标、相机坐标、图像坐标、像素坐标的原理、关系,并用matlab仿真
  15. 给宝贝女儿雅琪写的顺口溜
  16. Autumn Web Handler
  17. 用Python搞出自己的云词图 | 【带你装起来】
  18. jsp基础之page指令,include动作(新手学习笔记)
  19. 2022总结,强风吹拂
  20. streaming mr

热门文章

  1. 简单的信誉算法 js处理
  2. POJ 2653 Pick-up sticks (线段相交)
  3. 自定义方法中英文字符截取
  4. struts.xml文件的配置说明
  5. 政府数据集中异地备份概述
  6. [MongoDB]db.serverStatus()命令详解
  7. ORACLE REDO 日志调整
  8. android 弹出PopupWindow后背景逐渐变暗
  9. Android Studio删除无用的资源
  10. 【Android】刷Rom:adb reboot bootloader