题面

传送门:https://www.luogu.org/problemnew/show/P1462


Solution

这道题如果去除掉经过城市的收费.那么就是裸的最短路

但是题目要求经过城市中最多的一次性收费的最小值,也就是说让经过的最大值尽可能小

那我们可以考虑二分这个最大值

一切收费大于我们二分的值的城市统统不走

在最短路那里改一下就好了

然后就OjbK了

时间复杂度 O(n*logn*log b)


Code

//Luogu P1462 通往奥格瑞玛的道路
//May,27th,2018
//最短路+二分答案
#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
long long read()
{
long long x=0,f=1; char c=getchar();
while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}
while(isdigit(c)){x=x*10+c-'0';c=getchar();}
return x*f;
}
const int N=10000+100;
const int V_MAX=1000000000;
struct road
{
int to,dis;
friend bool operator < (road A,road B)
{
return A.dis > B.dis;
}
};
vector <road> e[N];
priority_queue <road,vector<road> > dl;
int dis[N],vis[N],n,m,b,v[N];
void dj(int lim)
{
while(dl.empty()==false) dl.pop();
memset(dis,0x3f,sizeof dis);
memset(vis,0,sizeof vis);
if(v[1]>lim) return;
road now;
now.to=1,now.dis=0,dis[1]=0;
dl.push(now);
while(dl.empty()==false)
{
now=dl.top();
dl.pop();
if(vis[now.to]==true) continue;
vis[now.to]=true;
for(int i=0;i<int(e[now.to].size());i++)
if(dis[e[now.to][i].to] > now.dis+e[now.to][i].dis and v[e[now.to][i].to]<=lim)
{
dis[e[now.to][i].to]=now.dis+e[now.to][i].dis;
road temp;
temp.to=e[now.to][i].to,temp.dis=dis[e[now.to][i].to];
dl.push(temp);
}
}
}
int main()
{
n=read(),m=read(),b=read();
for(int i=1;i<=n;i++)
{
e[i].reserve(4);
v[i]=read();
}
for(int i=1;i<=m;i++)
{
int a=read(),b=read(),c=read();
road temp;
temp.dis=c,temp.to=b;
e[a].push_back(temp);
temp.to=a;
e[b].push_back(temp);
} int L=0,R=V_MAX,ans=0x3f3f3f3f;
while(L<=R)
{
int mid=(L+R)/2;
dj(mid);
if(dis[n]<=b)
{
ans=min(ans,mid);
R=mid-1;
}
else
L=mid+1;
} if(ans!=0x3f3f3f3f)
printf("%d",ans);
else
printf("AFK");
return 0;
}

[Luogu P1462] 通往奥格瑞玛的道路 (二分答案+最短路径)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. Luogu P1462 通往奥格瑞玛的道路【二分/最短路】

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

随机推荐

  1. Redis 4.0.2分布式锁的Java实现

    简介 Redis分布式锁算法有两种,一种是单个Redis实例下的,一种是多个Redis实例的Redlock算法. 官方推荐Redlock算法,但是这个算法需要比较多的Redis实例而且是完全互相独立, ...

  2. 微信小程序-简介

    微信小程序定位 1. 不需要下载安装即可使用 2. 用户用完即走,不用关系是否安装太多应用 3. 应用无处不在,随时可用 # 不要安装可使用是个伪命题,因为小程序的安装包小于1M,下载安装到使用的过程 ...

  3. Go-项目环境搭建

    Go-环境搭建两个参数 1. GOROOT  Go SDK安装目录,Go语言安装目录 2. GOPATH   项目根目录 Go-项目目录结构 goProjectName 项目根目录 bin 项目编译后 ...

  4. 基于Excel参数化你的Selenium2测试-xlrd

    本篇文章转载至苦叶子:   前言 今天我们就如何使用xlrd模块来进行python selenium2 + excel自动化测试过程中的参数化进行演示说明,以解决大家在自动化测试实践过程中参数化的疑问 ...

  5. 报表和仪表板在线设计器Stimulsoft Designer 最新版发布

    Stimulsoft Designer是统一的Stimulsoft框架的一部分,该框架包括用于生成报表和分析数据的引擎.报表设计器和查看器. 您可以在计算机上创建报表,继续使用在线设计器在云中对其进行 ...

  6. 【题解】[SCOI]windy数

    Link 题目大意:求给定一个区间内满足每一位的数相差大于\(2\)且没有前导零的数的个数. \(\text{Solution:}\) 我们可以按照数位\(dp\).设状态为当前要\(dp\)第\(p ...

  7. 轻松理解JVM的分代模型

    前言 上篇文章我们一起对jvm的内存模型有了比较清晰的认识,小伙伴们可以参考JVM内存模型不再是秘密这篇文章做一个复习. 本篇文章我们将针对jvm堆内存的分代模型做一个详细的解析,和大家一起轻松理解j ...

  8. Linux系统的一些问题

    1.操作系统提供的服务: - 进程调度 - 内存管理 - 磁盘管理 - 网络服务 - 设备管理 - 提供应用程序编程接口 2.shell是什么? shell是一种具有特殊用途的程序,主要用于读取用户输 ...

  9. Dubbo的负载均衡策略&容错策略

    dubbo的负载均衡策略 RandomLoadBalance 随机调用负载均衡 默认方式该类实现了抽象的AbstractLoadBalance接口,重写了doSelect方法,看方法的细节就是首先遍历 ...

  10. Struts2 学习记录-第一天

    Struts2 -01 struts2框架认识 struts2框架是web层框架.struts2框架=webwork+strut1框架发展过来的.struts2框架设计主要用到技术:通过过滤器进行请求 ...