#\(\mathcal{\color{red}{Description}}\)

\(Link\)

有一个图,求其在\(1-N\)的最短路小于一个给定值下,点权最大值的最小值。

#\(\mathcal{\color{red}{Solution}}\)

\(emmm\)这个题也是几天前做的……正在填坑\(qwq\)。

这道题虽然在\(Luogu\)上显示是和\(\color{cyan}{A\ \ Link}\)一个难度的,但是要明显简单很多好不好……

正解的话,很显然要二分一个血量…… 因为二分(答案)是有套路的:

1、求最……的……(一般不可以静态求)

2、求什么就二分什么

3、 一般是反着推,就是用二分出的结果去推条件是否满足,或者状态是否合法

于是,二分交费,然后在\(check\)的时候,由于二分的是最大值,所以比二分的\(x\)大的就不走,小的可以走,以此为限制条件\(SPFA\),观察跑出来的最短路是否大于拥有的血量,大的话自然就不合法,小的话自然合法。然后就做完了\(qwq\)

#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#define ll long long
#define to(k) e[k].to using namespace std ;
const int MAXN = 62050 ;
struct edge{
ll to, next, v ;
}e[MAXN << 1] ;
queue<ll> q ;
ll head[MAXN << 1], cnt, dist[MAXN], i, k, ct ;
ll base[MAXN], l, r, mid, a, b, c, N, M, K, vis[MAXN], now ; inline void init(){
memset(dist, 0x3f, sizeof(dist)), memset(vis, 0, sizeof(vis)) ;
queue<ll> emt ; swap(q, emt), q.push(1), vis[1] = 1, dist[1] = 0 ;
}
inline bool check(ll x){
init() ;
while(!q.empty()){
now = q.front(), q.pop(), vis[now] = 0 ;
for(k = head[now]; k ; k = e[k].next){
if(base[to(k)] > x) continue ;
if(dist[to(k)] > dist[now] + e[k].v){
dist[to(k)] = dist[now] + e[k].v ;
if(!vis[to(k)]){
vis[to(k)] = 1 ;
q.push(to(k)) ;
}
}
}
}
if(dist[N] > K) return 0 ; return 1 ;
}
inline void add(int u, int v, int w){
e[++cnt].to = v, e[cnt].v = w ;
e[cnt].next = head[u], head[u] = cnt ;
}
int main(){
cin >> N >> M >> K ;
for(i = 1; i <= N; i ++) cin >> base[i] ;
for(i = 1; i <= M; i ++){
cin >> a >> b >> c ;
add(a, b, c), add(b, a, c) ;
}l = 0, r = 1000000000 ;
while(l < r){
mid = (l + r) >> 1 ;
if(check(mid)) r = mid ;
else l = mid + 1 ;
}
if(l == 1000000000) cout << "AFK" ;
else cout << l ;
}

幕后花絮:这个题我特别细心地判了\(-1\),结果让输出\(AFK\)……好吧人生就是这样的跌宕起伏\(ORZ\)……然后现在的我看二分答案就像我当年的我看快速幂一样,绝对不是不会,可以充分体现出我的“OI”思维没有多高……因为常人自然难以理解,\(Coder\)素质越高,理解起来越简单……现在的状态嘛…大概写出一份二分答案来问题不是很大,但是要做到稔熟于心,也还需要一段路要走啊\(qwq\)。

[LuoguP1462]通往奥格瑞玛的道路($SPFA+$二分)的更多相关文章

  1. luoguP1462通往奥格瑞玛的道路(二分答案+spfa)

    题意 给出n个点m条边的无向图. 每条边有两个权值a,b; 问在保证从1到n的路径a权值和小于x时,路径上b权值最大值最小为多少. (n≤10000,m≤50000,x≤1000000000) 题解 ...

  2. [LuoguP1462]通往奥格瑞玛的道路

    题目链接 题意简述:现在有一个图,每经过一个点就会交钱,走一条路就会扣血.在血量>0的前提下,要从1走到n点,并且要求路径上交钱的最大值最小. 解题思路:首先最大值最小,我们选择二分.目前有两个 ...

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

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

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

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

  5. 最短路【洛谷P1462】 通往奥格瑞玛的道路

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

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

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

  7. luogu P1462 通往奥格瑞玛的道路--spfa+二分答案

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

  8. P1462 通往奥格瑞玛的道路(二分答案+最短路)

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

  9. 洛谷P1462 通往奥格瑞玛的道路(二分+spfa,二分+Dijkstra)

    洛谷P1462 通往奥格瑞玛的道路 二分费用. 用血量花费建图,用单源最短路判断 \(1\) 到 \(n\) 的最短路花费是否小于 \(b\) .二分时需要不断记录合法的 \(mid\) 值. 这里建 ...

  10. P1462 通往奥格瑞玛的道路【二分+Dij】

    P1462 通往奥格瑞玛的道路 提交 29.89k 通过 6.88k 时间限制 1.00s 内存限制 125.00MB 题目提供者gconeice 难度提高+/省选- 历史分数100 提交记录 查看题 ...

随机推荐

  1. git push远程仓库时报错:fatal: remote origin already exists. (已解决)

    在做远程仓库调试阶段,突然发现修改后的项目无法push了: 如果输入$ git remote add origin git@github.com:djqiang(github帐号名)/gitdemo( ...

  2. web 后端规范与思想

    一.分层1.Web层(接受和发送Http请求的,封装;web层.controller层) 2.业务逻辑层(服务层,XXXService) LoginController(接受参数,判断是否非法,传给服 ...

  3. shiro标签的使用

    guest标签   用户没有身份验证时显示相应信息,即游客访问信息. user标签    用户已经身份验证/记住我登录后显示相应的信息. authenticated标签     用户已经身份验证通过, ...

  4. ci 3.0 默认路由放在子文件夹 无法访问的解决办法

      比方说你想配置默认路由为: $route['default_controller'] = 'index/home'; ci3.0之前是可以放在 controllers中的子文件夹中的,但是到了ci ...

  5. Week4——Hello.java分析

    如下图源码所示: 该段代码声明了一个entity实体类,该类有一个变量name,对该变量写了对应的get和set方法.类中还有一个空的构造方法hello(). @RequestScoped用于指定一个 ...

  6. LeetCode 之Find Minimum in Rotated Sorted Array

    1.题目描述 2.题目分析 对该问题,要找最小元,可以从后向前遍历,只要前一个元素大于当前元素,说明当前元素就是最小元. 3.代码 int findMin(vector<int>& ...

  7. 【Kettle】8、变量参数传递介绍

    本文为转载,感觉作者的辛勤劳作:http://blog.csdn.net/rotkang/article/details/21008271 ------------------------------ ...

  8. ReadWriteLock ReentrantReadWriteLock

    ReadWriteLock管理一组锁,一个是只读的锁,一个是写锁.读锁可以在没有写锁的时候被多个线程同时持有,写锁是独占的. 所有读写锁的实现必须确保写操作对读操作的内存影响.换句话说,一个获得了读锁 ...

  9. Oracle GI 日志收集工具 - TFA

    1.TFA的目的: TFA是个11.2版本上推出的用来收集Grid Infrastructure/RAC环境下的诊断日志的工具,它可以用非常简单的命令协助用户收集RAC里的日志,以便进一步进行诊断:T ...

  10. url用法

    url中的name用法: 0.定义主rul.py urlpatterns = [ url(r'^sinfors/', include('sinfors.urls', namespace="s ...