题目链接

笔者太菜直到现在才开始看最短路加二分……

解:

显然题目要二分,因为根据多年的经验,看到最大值最小,二话不说想二分……

既然问的是收费情况,那我们不妨二分收费情况。

题目都让我们输入交费数组了,不用它用谁呢?

l=1,r=n,开始二分。注意,左右边界是数组下标。

二分前,注意排序,sort一遍即可。同时,这意味着我们需要另一个数组来copy一下原数组。

依次判断中间值,缩小区间。如果当前交费比起点或终点还少的话,绝对不是答案,return false;

继续判断,将这个点的收费大与当前二分的收费的点的vis全部设为已经访问。

前向星存边,,边权就是生命值。

跑一遍堆优化dijkstra即可。

最后,再来判断,当前的最短路值(即所需生命)是否符合要求?符合,则True,不符合,则False.

注意,我们二分的是下标,所以,最后的答案应该是C[l],或者另开一个变量记录好了。(每个人的二分方法不一样,不一定是C[l])

Code:

#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
#define inf 2147483647
#define int long long
using namespace std;
int n,m,hp,vis[500000],tot,ans;
int dis[500000],head[500000];
int w[500000],c[500000],l,r;
struct edge{int next,to,dis;
}e[500000];
inline void add(int x,int y,int z){e[++tot].next=head[x];e[tot].to=y;e[tot].dis=z;head[x]=tot;
}
struct node{int dis,pos;bool operator <(const node&x)const{return x.dis<dis;}
};
priority_queue<node>q;
bool check(int Nhp){//二分当前money if(w[1]>Nhp||w[n]>Nhp)return false;//priority_queue<node>q;for(int i=1;i<=n;++i)dis[i]=inf;for(int i=1;i<=n;++i)if(w[i]>Nhp)vis[i]=true;//要钱太多不走 else vis[i]=false;dis[1]=0;q.push((node){0,1});//dijkstra while(!q.empty()){node tmp=q.top();q.pop();int x=tmp.pos;if(vis[x])continue;vis[x]=true;for(int i=head[x];i;i=e[i].next){int y=e[i].to;if(dis[y]>dis[x]+e[i].dis){dis[y]=dis[x]+e[i].dis;if(!vis[y])q.push((node){dis[y],y});}}}if(dis[n]<=hp)return true;//有命走到 else return false;//没命走到
}
signed main(){scanf("%lld%lld%lld",&n,&m,&hp);for(int i=1;i<=n;++i)scanf("%lld",&w[i]),c[i]=w[i];for(int i=1;i<=m;++i){int a,b,c;scanf("%lld%lld%lld",&a,&b,&c);if(a==b)continue;add(a,b,c);add(b,a,c);}sort(c+1,c+n+1);l=1,r=n;if(!check(c[n])){printf("AFK\n");ireturn 0;}ans=c[n];while(l<=r){int mid=l+r>>1;if(check(c[mid]))r=mid-1,ans=c[mid];else l=mid+1;}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/h-lka/p/11198864.html

【题解】通往奥格瑞玛的道路相关推荐

  1. 洛谷P1462 通往奥格瑞玛的道路 题解

    洛谷P1462 通往奥格瑞玛的道路 题解 题目链接:P1462 通往奥格瑞玛的道路 题意:在艾泽拉斯,有 nnn 个城市.编号为 1,2,3,-,n1,2,3,\ldots,n1,2,3,-,n . ...

  2. 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA

    洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA 二分交费最多的一次的钱数 然后只将符合要求的边加入图中 如果到终点的最短路大于等于血量 或者直接起点不能到达终点 那么说明不符合要求 需要 ...

  3. 【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路

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

  4. 通往奥格瑞玛的道路-二分+最短路

    通往奥格瑞玛的道路 题目: 在艾泽拉斯,有n个城市.编号为1,2,3,...,n. 城市之间有m条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联盟的攻击,进而损失一定的血量. 每次经过一 ...

  5. P1462 通往奥格瑞玛的道路

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

  6. 通往奥格瑞玛的道路(二分 + Dijkstra)

    通往奥格瑞玛的道路(二分 + 最短路) 思路: 1.二分可解决最大最小或者最小最大一类的问题 2.题目意思可以说我根本看不懂,其实题意:从1到n所有可行路径中,每个路径都有某个城市收费最大,求所有城市 ...

  7. 洛谷:P1462 通往奥格瑞玛的道路

    题目连接:P1462 通往奥格瑞玛的道路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目要求是假如有多条路线,求出每条路线的最大值然后选出其中的最小值. 一般这种问法都是二分. ...

  8. P1462 通往奥格瑞玛的道路(二分+dijkstra)

    P1462 通往奥格瑞玛的道路https://www.luogu.com.cn/problem/P1462  一道很不错的题,考察了二分和最短路 #include <iostream> # ...

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

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

  10. 洛谷 1462 通往奥格瑞玛的道路 题解

    博客观赏效果更佳 题意简述 nnn个点mmm条边的无向图,点边均有权.给定bbb.请你找到一个从1到n的路使得边权和<=b且点权的最大值最小. 思路 二分+最短路.对于一个mid,把所有点权&l ...

最新文章

  1. WPF窗口长时间无人操作鼠标自动隐藏
  2. 福布斯 : 企业市场Chrome任重道远
  3. ACL 2019 开源论文 | 使用跨领域语言建模的跨领域命名实体识别
  4. ubuntu下安装各种软件
  5. python获取eth0_Python获取网卡信息(名称、MAC、IP、网关等)
  6. 【Kali 树莓派版学习笔记】安装系统和VNC服务
  7. https访问http加载不出图片_前端解决第三方图片防盗链的办法
  8. 测试基础-03-用例设计方法:案例讲解
  9. python excel案例导入jira_用Python脚本批量添加JIRA用户,python,jira
  10. android 开机动画,修改安卓开机动画(除了部分系统 如MIUI等)
  11. 如何在keil5中定义结构变量
  12. 基于django框架下的werobot微信公总号开发(一)
  13. office2016选中、编辑突然变慢
  14. 思科计算机网络(1)计算机网络概述
  15. 使用opencv的viz模块显示3d点云
  16. 龙ol服务器维护补偿boss,龙OL副本BOOS位置攻击属性及掉落物品介绍
  17. 表单ajax提交插件,详解javascript表单的Ajax提交插件的使用
  18. 〖Python 数据库开发实战 - Python与Redis交互篇⑪〗- 综合案例 - 新闻管理系统 - 缓存新闻数据至redis
  19. 总结关于webpack
  20. “私域流量”的背后:利益催生黑色产业链,恶意营销泛滥成灾

热门文章

  1. Ceph 学习——OSD读写流程与源码分析(一)
  2. 遇到VerifyError束手无策?
  3. 【Unity3D】Helloworld
  4. SSH密钥登录系统报错Permissions 0644 for ‘xxx‘ re too open
  5. 走进GBase 8s之高可用功能(二)HAC灾备高可用
  6. 安霸Alberto Broggi :计算机视觉技术驱动自动驾驶的发展 | 2019 AI+智能汽车创新峰会... 1
  7. 命令提示符怎么进入D盘?简单的技能分享
  8. python3对拉勾数据进行可视化分析的方法详解
  9. 小朋友们freeeim
  10. 春季高考计算机基础知识试题答案,春季高考数学真题