• 题目链接:

    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. a标签的伪类

    a 超链接 伪类:给元素添加特殊的效果 :link 未访问过的链接初始颜色 :visited 访问过后的链接颜色 :hover 鼠标移入(悬停)时的颜色 :active 鼠标按下时链接的颜色 书写时的 ...

  2. 将一个SpringBoot工程打成jar包并在控制台执行起来

    JDK:1.8.0_212 IDE:STS4(Spring Tool Suit4 Version: 4.3.2.RELEASE) 工程下载:https://files.cnblogs.com/file ...

  3. Java静态函数、父类、子类执行顺序

    package class_test; /** * 静态函数.父类.子类执行顺序 * @author root * */ public class Test { public static void ...

  4. Oracle 字段监控 ( column monitor)

    Oracle 字段监控 ( column monitor) */--> Oracle 字段监控 ( column monitor) Table of Contents 1. 开启与关闭 2. 字 ...

  5. DownloadManager系统自带下载实现apk后台下载功能

    DownloadManager是android2.3以后,系统下载的方法,是处理长期运行的HTTP下载的系统服务.客户端可以请求的URI被下载到一个特定的目标文件.客户端将会在后台与http交互进行下 ...

  6. Python学习笔记:Unittest框架了解

    Unittest单元测试框架不仅可以适用于单元测试,还可以适用于自动化测试用来的开发与执行,该测试框架可执行测试用例,并提供丰富的断言方法,最终生成测试报告. 一.Unittest常用方法 1.Tes ...

  7. ansible报错处理

    [root@localhost ~]# ansible testhosts -m command -a 'rm -rf /tmp/haha' [WARNING]: Consider using the ...

  8. thinkphp6.0 nginx 配置

    location / {     index index.php;     #如果文件不存在则尝试TP解析     if (!-e $request_filename) {        rewrit ...

  9. JavaScript基础入门07

    目录 JavaScript 基础入门07 BOM window对象 Navigator对象 Screen 对象 Location对象 History 对象 JavaScript 基础入门07 BOM ...

  10. 数据中心网络中的40GBASE-T

    数据中心网络基础设施正在见证由不断增长的带宽和网络性能需求推动的变革.10 千兆位以太网是当今数据中心的实际标准,而 40G 以太网的采用率越来越高.虽然 40G 以太网标准已存在于 SM 光纤和基于 ...