通往奥格瑞玛的道路

题目:

在艾泽拉斯,有n个城市。编号为1,2,3,...,n。

城市之间有m条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联盟的攻击,进而损失一定的血量。

每次经过一个城市,都会被收取一定的过路费(包括起点和终点)。路上并没有收费站。

假设1为暴风城,n为奥格瑞玛,而他的血量最多为b,出发时他的血量是满的。

歪嘴哦不希望花很多钱,他想知道,在可以到达奥格瑞玛的情况下,他所经过的所有城市中最多的一次收取的费用的最小值是多少。

输入格式:
第一行3个正整数,n,m,b。分别表示有n个城市,m条公路,歪嘴哦的血量为b。

接下来有n行,每行1个正整数,fi。表示经过城市i,需要交费fi元。

再接下来有m行,每行3个正整数,ai,bi,ci(1<=ai,bi<=n)。表示城市ai和城市bi之间有一条公路,如果从城市ai到城市bi,或者从城市bi到城市ai,会损失ci的血量。

输出格式:
仅一个整数,表示歪嘴哦交费最多的一次的最小值。

如果他无法到达奥格瑞玛,输出AFK。

思路:

题面写的有歧义。。是所经过的所有城市中 / 最多的一次收取的费用 / 的最小值,而不是经过所有城市中最多的一次 / 收取的费用的最小值。。。。
对于这种求最大值中最小值的题,一般是二分,猜测路径中费用最大值,根据这个最大值利用最短路寻找路径,直到找到最小值。

代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue>
#define INF 0x3f3f3f3f
using namespace std;
int n, m, hp;
int f[10005];
int dis[10005],vis[10005];
struct edge
{int from, to, dis;edge(int a, int b, int c) : from(a), to(b), dis(c){};
};
vector<edge> e;
vector<int> p[10005];
void addedge(int a,int b,int c)
{e.push_back(edge(a, b, c));int key = e.size();p[a].push_back(key-1);e.push_back(edge(b, a, c));p[b].push_back(key);
}
struct heap
{int p, val;bool operator<(const heap &a) const{return val > a.val;}
};
priority_queue<heap> q;
bool dijstra(int maxm)
{if(f[1]>maxm)return false;memset(dis, INF, sizeof dis);dis[1] = 0;memset(vis, 0, sizeof vis);for (int i = 2; i <= n;i++){if(f[i]>maxm)vis[i] = 2;}q.push(heap{1, 0});while (!q.empty()){heap t = q.top();q.pop();int x = t.p;if (vis[x]!=0)continue;vis[x] = 1;for (int i = 0; i < p[x].size(); i++){edge key = e[p[x][i]];if (vis[key.to]!=2&&dis[key.to] > dis[x] + key.dis){dis[key.to] = dis[x] + key.dis;q.push(heap{key.to, dis[key.to]});}}}if (dis[n] > hp)return false;elsereturn true;
}
int main()
{scanf("%d%d%d", &n, &m, &hp);for (int i = 1; i <= n; i++){scanf("%d", &f[i]);}for (int i = 0; i < m;i++){int a, b, c;scanf("%d%d%d", &a, &b, &c);if(a==b)continue;addedge(a, b, c);}if(!dijstra(INF)){printf("AFK\n");return 0;}int low = 0, high = 1e9;while (low <= high){int mid = (low + high) / 2;if(dijstra(mid))high = mid-1;elselow = mid+1; }printf("%d\n", low);return 0;
}

转载于:https://www.cnblogs.com/booiris/p/11119957.html

通往奥格瑞玛的道路-二分+最短路相关推荐

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

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

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

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

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

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

  4. 通往奥格瑞玛的道路(二分+迪杰斯特拉堆优化)

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

  5. P1462 通往奥格瑞玛的道路(二分 迪杰斯特拉 最短路 + spfa最短路算法)

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

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

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

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

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

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

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

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

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

最新文章

  1. openwrt开发过程简介
  2. 【译】Federated Learning: Bringing Machine Learning to the edge with Kotlin and Android
  3. 附件文件无法保存到服务器,可能是目录属性设置问题,请与管理员联系,Discuz不能上传过大文件的解决办法...
  4. web 应用开发最佳实践之一:避免大型、复杂的布局和布局抖动
  5. P5068 [Ynoi2015]我回来了
  6. python动态图形_利用matplotlib实现根据实时数据动态更新图形
  7. C语言-郝斌笔记-007是否为素数
  8. GoLand 远程开发配置
  9. jquery 弹出层插件
  10. raid5什么意思?怎样做raid5?raid5 几块硬盘?
  11. 免费推广网站实例(珍藏版)
  12. vue 萤石云视频监控对接
  13. 谈谈柔性屏/可折叠屏的过去、现在和未来
  14. 微信定位服务器在哪个位置打开,微信开了定位功能附近的人都看不到我是怎么回事...
  15. z17刷机miui12教程_努比亚Z17 MIUI12开发版 匠心独特 完美ROOT 隐私升级 通知栏升级...
  16. Oracle 18c新特性一览
  17. 记一次配置路由器无线桥接的过程——让古董路由器发挥余热
  18. Python 读取文件夹中指定后缀的文件
  19. html 图像热点在线处理,html area图片热点的使用介绍附相关属性一览表
  20. CSS动画,风车案例

热门文章

  1. 【OpenCV】OpenCV函数精讲之 -- 初级图像混合
  2. 超棒!纯Rust编写的机器学习框架,速度堪比PyTorch
  3. 3D Vision | 移动机器人视觉三维感知的现在与将来
  4. 量子科技概念大火,国内现状如何?华为BAT均入局量子计算
  5. 论文绘图神器来了:哈佛博士后开源一行代码绘制不同期刊格式图表
  6. 招聘 | 大疆算法类未来大咖招聘
  7. 综述 | 万字长文带你入门近几年深度学习的重要研究成果
  8. 最详细的Fast RCNN论文笔记
  9. matlab lti全响应,《LTI系统的响应——实验报告》.doc
  10. js如何提高for循环的效率_让你瞬间提高工作效率的常用js函数汇总