[Luogu P1462] 通往奥格瑞玛的道路 (二分答案+最短路径)
题面
传送门: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] 通往奥格瑞玛的道路 (二分答案+最短路径)的更多相关文章
- Luogu P1462 通往奥格瑞玛的道路 二分答案+最短路
先二分答案,再跑最短路,跑的时候遇到 过路费超过二分的答案的 就不拿他更新最短路 #include<cstdio> #include<iostream> #include< ...
- 洛谷P1462通往奥格瑞玛的道路——二分答案最短路
题目:https://www.luogu.org/problemnew/show/P1462 最大值最小问题,二分答案. 代码如下: #include<iostream> #include ...
- 洛谷P1462 通往奥格瑞玛的道路[二分答案 spfa 离散化]
题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...
- luogu P1462 通往奥格瑞玛的道路--spfa+二分答案
P1462 通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡 ...
- Luogu P1462 通往奥格瑞玛的道路(最短路+二分)
P1462 通往奥格瑞玛的道路 题面 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己 ...
- P1462 通往奥格瑞玛的道路 (二分+最短路)
题目 P1462 通往奥格瑞玛的道路 给定\(n\)个点\(m\)条边,每个点上都有点权\(f[i]\),每条边上有边权,找一条道路,使边权和小于给定的数\(b\),并使最大点权最小. 解析 二分一下 ...
- 洛谷 P1462 通往奥格瑞玛的道路——二分+spfa
上一波链接 https://www.luogu.org/problem/P1462 这道题我们考虑二分答案 然后每次跑一次spfa判断是否能够到达n点 tips:在不考虑负权边的前提下我们写最短路最好 ...
- 洛谷 - P1462 - 通往奥格瑞玛的道路 - 二分 - Dijkstra
https://www.luogu.org/problem/P1462 感觉,要二分最大收费权的城市,把小于等于它的全部插进去,Dijkstra一下求出最小的血量.这样感觉太暴力了. 考虑只有1000 ...
- Luogu P1462 通往奥格瑞玛的道路【二分/最短路】
题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...
随机推荐
- 【4】进大厂必须掌握的面试题-Java面试-jdbc
1.什么是JDBC驱动程序? JDBC驱动程序是使Java应用程序与数据库进行交互的软件组件.JDBC驱动程序有4种类型: JDBC-ODBC桥驱动程序 本机API驱动程序(部分为Java驱动程序) ...
- linux内存优化之手工释放linux内存
先介绍下free命令 Linux free命令用于显示内存状态. free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等. 语法: free [- ...
- 测试-python相关
python基础 一行代码实现1~100累加,不使用for循环 方式一: sum(range(1,101)) 方式二: 1 from functools import reduce 2 reduce( ...
- centos8安装kafka(单机方式)
一,下载kafka 1,官网地址 http://kafka.apache.org/downloads.html 2,下载 [root@localhost source]# wget http://mi ...
- PHP7下的协程实现 转
前言 相信大家都听说过『协程』这个概念吧. 但是有些同学对这个概念似懂非懂,不知道怎么实现,怎么用,用在哪,甚至有些人认为yield就是协程! 我始终相信,如果你无法准确地表达出一个知识点的话 ...
- python并发编程之多进程(实践篇) 转
一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了multiproce ...
- 服务器同一个tomcat部署2两个相同的项目
项目A,B(B 是A 的复制) 若把A,B工程同时部署到tomcat下,会发生只能访问A,B工程中的其中一个,而另一个会出现404错误(或者无法访问),此时可参照如下方法解决: 步骤1:找到工程下的w ...
- SQL SERVER调优常用方法 sql优化
说起SQL SERVER的调优,我想大伙也很想知道这方面的知识.本人也正在探索的路上,大家有什么好的意见,欢迎一起探讨.研究.博取众人之长,才能扬长避短.本文中的内容主要是摘自<程序员的SQL金 ...
- day70:Vue:Git&路飞学城页面效果
目录 1.Git 2.路飞学城项目页面效果 0.安装elements UI 1.顶部导航栏效果 2.轮播图效果 1.Git 什么是git?分布式版本管理工具 1.git操作 # 1 创建git本地仓库 ...
- leaflet平台添加天地图方法
leaflet平台添加天地图得方法具体如下操作 var map = L.map('map', { crs: L.CRS.EPSG4326, zoomControl: true, edit ...