题目的描述就很有意思,可以顺便去了解一下魔兽的背景故事。学习使我们快乐!

题目链接:https://www.luogu.org/problemnew/show/P1462


大清早上起来A掉一道题,好兴奋。看到题目要求收费最多的一次的最小值,想到用二分答案,二分这个最小值,然后去跑最短路,看是否可以,再不断更新区间,使这个值尽量小。几乎没有什么难点,但需要注意的细节有几个。估计答案的最大值应为收费最多的城市所收的费用;检验时,我是采用若发现某个结点的收费比当前所验证的答案大,则不再扩展,最后通过检查是否存在最短路,最短路是否可以回到奥格瑞玛,但问题是,如果终点不符合要求,同样会存在最短路,最短路可能也可以回到奥格瑞玛,所以还需要额外检查终点是否不超过检验的答案。

还有,无向图用邻接表存储时,每条边会存两次!!!

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <queue>
 4
 5 using namespace std;
 6
 7 inline int get_num() {
 8     int num = 0;
 9     char c = getchar();
10     while (c < '0' || c > '9') c = getchar();
11     while (c >= '0' && c <= '9')
12         num = num * 10 + c - '0', c = getchar();
13     return num;
14 }
15
16 const int maxn = 1e4 + 5, maxm = 5e4 + 5, inf = 0x3f3f3f3f;
17
18 int head[maxn], eid;
19
20 struct Edge {
21     int v, w, next;
22 } edge[2 * maxm];
23
24 inline void insert(int u, int v, int w) {
25     edge[++eid].v = v;
26     edge[eid].w = w;
27     edge[eid].next = head[u];
28     head[u] = eid;
29 }
30
31 struct node {
32     int id, dist;
33     node(int i, int d) : id(i), dist(d) {}
34     bool operator < (const node& rhs) const {
35         return dist > rhs.dist;
36     }
37 };
38
39 int n, m, b, f[maxn], dist[maxn], vis[maxn];
40
41 priority_queue<node> q;
42
43 inline int check(int x) {
44     memset(vis, 0, sizeof(vis));
45     memset(dist, inf, sizeof(dist));
46     dist[1] = 0;
47     q.push(node(1, 0));
48     while (!q.empty()) {
49         int u = q.top().id;
50         q.pop();
51         if (vis[u]) continue;
52         vis[u] = 1;
53         for (int p = head[u]; p; p = edge[p].next) {
54             int v = edge[p].v, w = edge[p].w;
55             if (f[v] > x) continue;
56             if (dist[v] > dist[u] + w) {
57                 dist[v] = dist[u] + w;
58                 q.push(node(v, dist[v]));
59             }
60         }
61     }
62     if (dist[n] > b) return 0;
63     else return 1;
64 }
65
66 int main() {
67     n = get_num(), m = get_num(), b = get_num();
68     int mf = 0;
69     for (int i = 1; i <= n; ++i) {
70         f[i] = get_num();
71         if (f[i] > mf) mf = f[i];
72     }
73     for (int i = 1; i <= m; ++i) {
74         int u = get_num(), v = get_num(), w = get_num();
75         insert(u, v, w);
76         insert(v, u, w);
77     }
78     if (!check(mf)) {printf("AFK"); return 0;}
79     int l = 1, r = mf;
80     while (l < r) {
81         int mid = l + (r - l) / 2;
82         if (check(mid)) r = mid;
83         else l = mid + 1;
84     }
85     printf("%d", l);
86     return 0;
87 }

AC代码

转载于:https://www.cnblogs.com/Mr94Kevin/p/9539894.html

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

  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的城市 ...

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

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

最新文章

  1. linux history记录格式修改
  2. 使用模板将Web服务的结果转换为标记语言
  3. 把指定用户的命令写在/home/etc/rc.local中,系统开机时就会自动执行指定用户的命令。
  4. FZU 1019猫捉老鼠
  5. 让机器读懂视频:亿级淘宝视频背后的多模态AI算法揭秘
  6. redux-thunk使用_Redux Thunk用示例解释
  7. 第12章[12.2] Ext JS可编辑列Grid的全场景开发
  8. dev.c drv.c bus.c
  9. js判断字符在另一个字符串中出现次数
  10. 创建Java源代码文件----开始编写代码
  11. leetcode:买卖股票最佳时机含手续费
  12. stm32 火灾自动报警及联动控制源码_火灾自动报警系统设计规范 :联动控制
  13. android代码签名和混淆打包
  14. win7桌面背景地址
  15. MetaPAD: 从大量文本语料库中发现元模式
  16. 将tensorflow模型转换为uff模型
  17. 戴老师论文阅读:Two-Timescale Channel Estimation for Reconfigurable Intelligent Surface Aided Wireless...
  18. SQL中的WHILE循环使用
  19. 腾讯云从业者资格认证考试模拟题
  20. python 读取邮件

热门文章

  1. qt 设置背景图片方法
  2. php怎么建留言本,php实现留言板功能的详细代码
  3. (论文笔记)SC4D: A Sparse 4D Convolutional Network for Skeleton-Based Action Recognition
  4. spydroid-ipcamera-master.zip
  5. PS新手教程:加深减淡工具使用方法
  6. 华为写代码的这13年,成为了我最宝贵的人生历程
  7. 什么是UART中的FIFO ?
  8. 2022:股票程序化交易实战2022Q1
  9. early fusion VS later fusion
  10. 阿里无影云电脑磁盘性能测试