洛谷:P1462 通往奥格瑞玛的道路
题目连接: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 通往奥格瑞玛的道路相关推荐
- 洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA
洛谷P1462 通往奥格瑞玛的道路 二分答案+最短路SPFA 二分交费最多的一次的钱数 然后只将符合要求的边加入图中 如果到终点的最短路大于等于血量 或者直接起点不能到达终点 那么说明不符合要求 需要 ...
- 洛谷P1462 通往奥格瑞玛的道路 题解
洛谷P1462 通往奥格瑞玛的道路 题解 题目链接:P1462 通往奥格瑞玛的道路 题意:在艾泽拉斯,有 nnn 个城市.编号为 1,2,3,-,n1,2,3,\ldots,n1,2,3,-,n . ...
- 洛谷 P1462 通往奥格瑞玛的道路 Label: 最小化最大值 spfa (存多条边示例)
题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...
- 洛谷P1462 通往奥格瑞玛的道路
题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量. 有一天他醒来后发现自己居然到了联盟的主城暴风城. 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛. 题目描述 在艾泽 ...
- 洛谷 P1462 通往奥格瑞玛的道路
Description 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 在艾泽拉 ...
- 洛谷 1462 通往奥格瑞玛的道路
题目背景 Background 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛. ...
- [洛谷1462 ]通往奥格瑞玛的道路---二分答案+spfa
题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...
- 洛谷 1462 通往奥格瑞玛的道路 题解
博客观赏效果更佳 题意简述 nnn个点mmm条边的无向图,点边均有权.给定bbb.请你找到一个从1到n的路使得边权和<=b且点权的最大值最小. 思路 二分+最短路.对于一个mid,把所有点权&l ...
- 洛谷1462 通往奥格瑞玛的道路 二分+spfa
题目链接: https://www.luogu.org/problem/show?pid=1462 题意: 题解: 二分法+最短路判定. 二分经过城市的最大费用w,然后判定:对于每一个费用大于w的城市 ...
最新文章
- linux驱动设备树
- Android View绘制之旅
- Android Parcelable和Serializable的区别
- 开发日记-20190526 关键词 读书笔记《鸟哥的Linux私房菜-基础学习篇》
- python中列表生成式strip_Python 列表API 序列类型 列表生成
- Era 贪心 Codeforces Round #752 (Div. 2)
- 转发:Ajax动态画EChart图表
- ssis for循环容器_SSIS包中的序列容器
- 数组去重和两个数组求交集
- CentOS 6系统FreeSwitch和RTMP服务 安装及演示(一)
- php中的get_called_class()方法
- 浅谈网站渗透的常用方法和一般思路
- MYSQL的随机函数
- word恢复临时保存文件(.asd)无限循环另存为
- 最好听的男孩名字及1000个好听的女孩的名字
- Eclipse 2020如何创建JAVA Web项目
- HBase数据库总结(一)
- Android烟雾监控应用,基于Android的智能家庭监控系统研制
- 使用多线程往同一个文件写入数据的线程安全的例子(java实现)
- OFD[2]-第二章 期货市场和期货合约套期保值应用
热门文章
- 统一门户系统解决方案,协同办公更敏捷
- 手把手教你通过solidworks模拟摩擦运动
- 2018北航计算机 北理工计算机夏令营经验分享
- android 打开屏幕,Android打开屏幕
- 《你不可不知的人性》刘墉 读书笔记(五)
- 爬取腾讯视频 xpath方式
- python 梦幻西游_tensorflow实践:梦幻西游人物弹窗识别(二)
- error: can‘t create transaction lock on /var/lib/rpm/.rpm.lock (Permission denied)
- [LayoutConstraints] Unable to simultaneously satisfy constraints.
- 计算机专业1分钟能打多少字,一分钟打多少字算合格?