题目连接:P1462 通往奥格瑞玛的道路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题目要求是假如有多条路线,求出每条路线的最大值然后选出其中的最小值。

一般这种问法都是二分。

对于单次最大收费小于等于x的情形如果存在方案,那么大于x的也存在方案,因为费用越大所能走的路就越多。显然可以用二分。

然后有两个变量血量以及费用我们以谁为二分的分界点呢??

首先我们可以看到题目输入的边是血量,所以我们可以以经过一条路的血量总和check(mid)不超过题目输入的blood为分界点。若check(mid) <= blood则扩大费用即r = mid,否则缩小费用l = mid + 1;

然后我们确定一下二分的起始点,因为起点和终点是包括费用的,所以费用的最小值为起点和终点中的最大值,而费用的最大值即为每个点费用的最大值

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>#define x first
#define y secondusing namespace std;typedef pair<long, int> PLI;//会爆intconst int N = 10010, M = 1000010;int l, r;
bool st[N];
int fees[N];
int n, m, blood;
long long dist[N];
int h[N], e[M], ne[M], w[M], idx;void add(int a, int b, int c)//邻接表
{e[idx] = b;w[idx] = c;ne[idx] = h[a];h[a] = idx;idx ++ ;
}int check(int maxd)//dijkstra模板
{memset(st, 0, sizeof st);memset(dist, 0x3f, sizeof dist);priority_queue<PLI, vector<PLI>, greater<PLI>> heap;dist[1] = 0;heap.push({dist[1], 1});while (heap.size()){auto t = heap.top();heap.pop();int ver = t.y;if (st[ver]) continue;st[ver] = true;if (ver == n) return dist[n];for (int i = h[ver]; i != -1; i = ne[i]){int j = e[i];if (fees[j] > maxd) continue;//将大于mid的费用舍去if (dist[j] > dist[ver] + w[i]){dist[j] = dist[ver] + w[i];heap.push({dist[j], j});}}}return dist[n];//得到从1 - n的所需的血量总和
}int main()
{cin >> n >> m >> blood;for (int i = 1; i <= n; i ++ ){cin >> fees[i];r = max(r, fees[i]);//二分最大值}l = max(l, max(fees[1], fees[n]));//二分最小值memset(h, -1, sizeof h);while (m -- ){int a, b, c;scanf("%d %d %d", &a, &b, &c);add(a, b, c), add(b, a, c);}while (l < r){int mid = l + r >> 1;if (check(mid) <= blood) r = mid;else l = mid + 1;}if (check(l) > blood) puts("AFK");//最后找出的答案大于blood说明无解else printf("%lld\n", r);return 0;
}

洛谷:P1462 通往奥格瑞玛的道路相关推荐

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

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

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

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

  3. 洛谷 P1462 通往奥格瑞玛的道路 Label: 最小化最大值 spfa (存多条边示例)

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

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

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

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

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

  6. 洛谷 1462 通往奥格瑞玛的道路

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

  7. [洛谷1462 ]通往奥格瑞玛的道路---二分答案+spfa

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

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

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

  9. 洛谷1462 通往奥格瑞玛的道路 二分+spfa

    题目链接: https://www.luogu.org/problem/show?pid=1462 题意: 题解: 二分法+最短路判定. 二分经过城市的最大费用w,然后判定:对于每一个费用大于w的城市 ...

最新文章

  1. linux驱动设备树
  2. Android View绘制之旅
  3. Android Parcelable和Serializable的区别
  4. 开发日记-20190526 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
  5. python中列表生成式strip_Python 列表API 序列类型   列表生成
  6. Era 贪心 Codeforces Round #752 (Div. 2)
  7. 转发:Ajax动态画EChart图表
  8. ssis for循环容器_SSIS包中的序列容器
  9. 数组去重和两个数组求交集
  10. CentOS 6系统FreeSwitch和RTMP服务 安装及演示(一)
  11. php中的get_called_class()方法
  12. 浅谈网站渗透的常用方法和一般思路
  13. MYSQL的随机函数
  14. word恢复临时保存文件(.asd)无限循环另存为
  15. 最好听的男孩名字及1000个好听的女孩的名字
  16. Eclipse 2020如何创建JAVA Web项目
  17. HBase数据库总结(一)
  18. Android烟雾监控应用,基于Android的智能家庭监控系统研制
  19. 使用多线程往同一个文件写入数据的线程安全的例子(java实现)
  20. OFD[2]-第二章 期货市场和期货合约套期保值应用

热门文章

  1. 统一门户系统解决方案,协同办公更敏捷
  2. 手把手教你通过solidworks模拟摩擦运动
  3. 2018北航计算机 北理工计算机夏令营经验分享
  4. android 打开屏幕,Android打开屏幕
  5. 《你不可不知的人性》刘墉 读书笔记(五)
  6. 爬取腾讯视频 xpath方式
  7. python 梦幻西游_tensorflow实践:梦幻西游人物弹窗识别(二)
  8. error: can‘t create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied)
  9. [LayoutConstraints] Unable to simultaneously satisfy constraints.
  10. 计算机专业1分钟能打多少字,一分钟打多少字算合格?