• 题目链接:

    https://www.luogu.org/problemnew/show/P1462

  • 思路:

    又是一道水题,很明显二分+最短路

    而且这道题数据非常水,spfa有个小错误居然拿了91分还比正解快

    我们二分金钱数,节点权值大于二分值的都不能走。二分中跑spfa,如果不能走到终点,即dis[n]>=b,则说明二分值偏小。

  • 注意:

    1. 血量\(<=0\)则说明不能达到

    2. 二分不要写错,这次居然一遍写对

    3. 有个比较明显的优化,显然最小值一定是某个节点的权值,所以我们可以排序离散化后二分下标,但是我没有写

    4. SLF优化后快了100+ms

  • 代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <vector>
#include <queue>
#include <cctype>
#define ri register int
#define ll long long
using namespace std;
const ll inf=9926081792;
const int maxn=10005;
const int maxm=50005;
ll g[maxn],dis[maxn];
int h[maxn],num_edge=0;
bool vis[maxn];
int n,m;
ll b;
struct Edge{
int ne,to;
ll dis;
}edge[maxm<<2];
inline void add_edge(int f,int t,ll dis){
edge[++num_edge].ne=h[f];
edge[num_edge].to=t;
edge[num_edge].dis=dis;
h[f]=num_edge;
}
template <class T>inline void read(T &x){
x=0;int ne=0;char c;
while(!isdigit(c=getchar()))ne=c=='-';
x=c-48;
while(isdigit(c=getchar()))x=(x<<3)+(x<<1)+c-48;
x=ne?-x:x;
return ;
}
inline int spfa(ll len){
deque<int>q;
int u,v,c;
while(q.size())q.pop_front();
//memset(vis,0,sizeof(vis));
for(ri i=1;i<=n;i++){dis[i]=inf,vis[i]=0;}
dis[1]=0,vis[1]=1;
q.push_back(1);
while(!q.empty()){
u=q.front();q.pop_front();
for(ri i=h[u];i;i=edge[i].ne){
v=edge[i].to;
if((len-g[v]>=0)&&dis[v]>dis[u]+edge[i].dis){
dis[v]=dis[u]+edge[i].dis;
if(q.empty()){
if(!vis[v]){
vis[v]=1;
q.push_back(v);
}
}
c=q.front();
if(dis[v]>dis[c]){
if(!vis[v]){
vis[v]=1;
q.push_back(v);
}
}
else if(!vis[v]){
vis[v]=1;
q.push_front(v);
} }
}
vis[u]=0;
}
if(dis[n]>=b)return 0;
return 1;
}
int main(){
ll l=1,r=n;
int u,v,c;
read(n),read(m),read(b);
for(ri i=1;i<=n;i++)read(g[i]);
for(ri i=1;i<=m;i++){
read(u),read(v),read(c);
add_edge(u,v,c);
add_edge(v,u,c);
}
if(!spfa(inf)){
puts("AFK");
return 0;
}
while(l<r){
ll mid=(l+r)>>1;
if(spfa(mid))r=mid;
else l=mid+1;
}
printf("%d",r);
return 0;
}

luogu题解 P1462 【通往奥格瑞玛的道路】二分+spfa的更多相关文章

  1. 洛谷 P1462 通往奥格瑞玛的道路——二分+spfa

    上一波链接 https://www.luogu.org/problem/P1462 这道题我们考虑二分答案 然后每次跑一次spfa判断是否能够到达n点 tips:在不考虑负权边的前提下我们写最短路最好 ...

  2. [Luogu P1462] 通往奥格瑞玛的道路 (二分答案+最短路径)

    题面 传送门:https://www.luogu.org/problemnew/show/P1462 Solution 这道题如果去除掉经过城市的收费.那么就是裸的最短路 但是题目要求经过城市中最多的 ...

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

    题目 P1462 通往奥格瑞玛的道路 给定\(n\)个点\(m\)条边,每个点上都有点权\(f[i]\),每条边上有边权,找一条道路,使边权和小于给定的数\(b\),并使最大点权最小. 解析 二分一下 ...

  4. 洛谷 - P1462 - 通往奥格瑞玛的道路 - 二分 - Dijkstra

    https://www.luogu.org/problem/P1462 感觉,要二分最大收费权的城市,把小于等于它的全部插进去,Dijkstra一下求出最小的血量.这样感觉太暴力了. 考虑只有1000 ...

  5. 【Luogu】P1462通往奥格瑞玛的道路(二分答案+SPFA)

    题目链接 导致我WA十几遍的原因居然是最大值不够大……以后再也不相信memset(dis,127/3,sizeof(dis))了. 此题先将花费排序,然后二分最大花费,spfa判断解是否可行.spfa ...

  6. 洛谷P1462 通往奥格瑞玛的道路[二分答案 spfa 离散化]

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

  7. Luogu P1462 通往奥格瑞玛的道路 二分答案+最短路

    先二分答案,再跑最短路,跑的时候遇到 过路费超过二分的答案的 就不拿他更新最短路 #include<cstdio> #include<iostream> #include< ...

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

    题目:https://www.luogu.org/problemnew/show/P1462 最大值最小问题,二分答案. 代码如下: #include<iostream> #include ...

  9. 洛谷 P1462 通往奥格瑞玛的道路(spfa+二分搜索)(4boy)

    原题:http://www.luogu.org/problem/show?pid=1462#sub 4boy: 大意:给出n个城市,有m条路,每经过一个城市都要交钱,每经过一条道路都要扣HP,有HP上 ...

  10. 洛谷 P1462 通往奥格瑞玛的道路 二分 最短路

    #include<cstdio> #include<queue> #include<cstring> #include<algorithm> using ...

随机推荐

  1. JVM 监控工具——jstatd

    1. 简介 jstatd是一个rmi的server应用,用于监控jvm的创建和结束,并且提供接口让监控工具(如visualvm)可以远程连接到本机的jvms . 注意是jvms,就是说运行jstatd ...

  2. WebSocket-nodejs实现

    一.环境配置 1.下载安装nodejs      https://nodejs.org/en/download/ 2.安装完成后打开cmd命令,执行node --version,看看是否安装成功,如果 ...

  3. EBI架构 VS. MVC

    和 MVC 模式中的 Model 代表着整个后端(包括所有实体.服务和它们之间的关系在内的一切)一样,EBI 模式将边界看作是和外部世界的完整连接,而不仅仅是一个视图.一个控制器或是一个接口(这里指的 ...

  4. TP框架如何绑定参数。目的进行ajax验证

    TP框架的自动绑定 对于某些操作的情况(例如模型的写入和更新方法),可以支持参数的自动绑定,例如: 首先需要开启DB_BIND_PARAM配置参数: 'DB_BIND_PARAM' => tru ...

  5. Python:百科

    ylbtech-Python:百科 Python是一种跨平台的计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越 ...

  6. H5 页面适配几种展现形式

    1.contain 模式:以内容中心为基点按照视觉稿的宽高比缩放以适配窗口显示全页面内容,窗口与内容的宽度比或高度比之间较小者缩放填满窗口,当窗口宽高比和视觉稿不同时,另一方向的两侧出现留空部分. 2 ...

  7. 【React自制全家桶】九、Redux入手

    一.React项目中为什么要用Redux 上图: 左图当使用纯React开发稍微大点的项目,因为React数据是瀑布式的,只能通过父子组件传递数据,所以实现关系不大的两React的组件之间的数据传递就 ...

  8. JDBC插入数据,获取自增长值

    package com.loaderman.demo.c_auto; public class Dept { private int id; private String deptName; publ ...

  9. liunx服务器在本地可以访问但是外网访问不了

    版权声明:本文为CSDN博主「tlytg456」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/tlytg/ar ...

  10. 在VS CODE中调试Angular代码

    Chrome Dev Tools 可以调试js程序,但是可能需要和源码之间来回切换. 如果是使用VS CODE来开发Angular,可以直接在VS CODE中调试. 按照如下的步骤即可: 第一步,  ...