洛谷 P1462 通往奥格瑞玛的道路(二分答案,堆优化dijkstra)
传送门
解题思路
首先看题目问题,求经过的所有城市中最多的一次收取的费用的最小值是多少。一看“最大值最小”就想到了二分答案。
在读一遍题目,就是二分收取的费用,然后对于每一个二分的费用,跑一边最短路,要求不经过>收取费用的城市,最后看一看能否在规定血量内走到终点。
想起来还是比较容易的,写起来要注意一下细节,注意二分的形式和用堆优化的dijkstra的写法。
悲惨的做题经历
今天凌晨,终于灵光一现,发现了问题——变量定义在主函数外面时不能直接用另一个变量来赋初值!!怪不得总是wrong answer!!
终于解决了烦了我三天的题了(终于可以睡觉了)QAQ
AC代码
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn=;
const int maxm=;
long long n,m,b,f[maxn],p[maxn],cnt,d[maxn],vis[maxn],dis[maxn];
struct edge{
int v,next;
long long value;
}e[maxm];
void insert(int u,int v,long long value){
cnt++;
e[cnt].v=v;
e[cnt].next=p[u];
e[cnt].value=value;
p[u]=cnt;
}
struct node{
int num;
long long value;
};
bool operator <(node a,node b){
return a.value>b.value;
}
bool dijkstra(long long mid){
if(f[]>mid||f[n]>mid) return false;
memset(dis,0x3f,sizeof(dis));
memset(vis,,sizeof(vis));
priority_queue<node> q;
node tou;
tou.num=;
tou.value=;
dis[]=;
q.push(tou);
while(!q.empty()){
node u=q.top();
q.pop();
if(vis[u.num]) continue;
vis[u.num]=;
for(long long i=p[u.num];i!=-;i=e[i].next){
if(f[e[i].v]>mid) continue;
if(dis[u.num]+e[i].value<dis[e[i].v]){
dis[e[i].v]=dis[u.num]+e[i].value;
node neww;
neww.num=e[i].v;
neww.value=dis[e[i].v];
if(!vis[e[i].v])q.push(neww);
}
}
}
if(dis[n]>=b) return false;
return true;
}
long long l=,r;
int main()
{
cin>>n>>m>>b;
r=n;
memset(p,-,sizeof(p));
for(int i=;i<=n;i++){
scanf("%lld",&f[i]);
d[i]=f[i];
}
for(int i=;i<=m;i++){
long long u,v,value;
scanf("%lld%lld%lld",&u,&v,&value);
insert(u,v,value);
insert(v,u,value);
}
sort(d+,d++n);
if(!dijkstra(d[n])){
cout<<"AFK";
return ;
}
while(l<r){
int mid=(l+r)/;
if(dijkstra(d[mid])) r=mid;
else l=mid+;
}
cout<<d[l];
return ;
}
洛谷 P1462 通往奥格瑞玛的道路(二分答案,堆优化dijkstra)的更多相关文章
- 洛谷P1462通往奥格瑞玛的道路——二分答案最短路
题目:https://www.luogu.org/problemnew/show/P1462 最大值最小问题,二分答案. 代码如下: #include<iostream> #include ...
- 洛谷P1462 通往奥格瑞玛的道路[二分答案 spfa 离散化]
题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描述 在艾泽拉斯, ...
- 洛谷 P1462 通往奥格瑞玛的道路——二分+spfa
上一波链接 https://www.luogu.org/problem/P1462 这道题我们考虑二分答案 然后每次跑一次spfa判断是否能够到达n点 tips:在不考虑负权边的前提下我们写最短路最好 ...
- 洛谷 - P1462 - 通往奥格瑞玛的道路 - 二分 - Dijkstra
https://www.luogu.org/problem/P1462 感觉,要二分最大收费权的城市,把小于等于它的全部插进去,Dijkstra一下求出最小的血量.这样感觉太暴力了. 考虑只有1000 ...
- 洛谷 P1462 通往奥格瑞玛的道路 二分 最短路
#include<cstdio> #include<queue> #include<cstring> #include<algorithm> using ...
- 洛谷P1462 通往奥格瑞玛的道路(二分+spfa,二分+Dijkstra)
洛谷P1462 通往奥格瑞玛的道路 二分费用. 用血量花费建图,用单源最短路判断 \(1\) 到 \(n\) 的最短路花费是否小于 \(b\) .二分时需要不断记录合法的 \(mid\) 值. 这里建 ...
- 洛谷 P1462 通往奥格瑞玛的道路 解题报告
P1462 通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡 ...
- 洛谷——P1462 通往奥格瑞玛的道路
P1462 通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡 ...
- 洛谷 P1462 通往奥格瑞玛的道路 题解
P1462 通往奥格瑞玛的道路 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡 ...
- [Luogu P1462] 通往奥格瑞玛的道路 (二分答案+最短路径)
题面 传送门:https://www.luogu.org/problemnew/show/P1462 Solution 这道题如果去除掉经过城市的收费.那么就是裸的最短路 但是题目要求经过城市中最多的 ...
随机推荐
- Flink Forward Asia 2019 - 总结和展望(附PPT下载链接)
11 月 28 - 30 日,北京迎来了入冬以来的第一场雪,2019 Flink Forward Asia(FFA)也在初雪的召唤下顺利拉开帷幕.尽管天气寒冷,FFA 实际到会人次超过 2000,同比 ...
- ASP:CheckBox获取前台的checked的属性
后台代码: for (int i = 0; i < this.GvCourses.Rows.Count; i++) { CheckBox chb = this.GvCourses.Rows[i] ...
- ios input readonly失效(点击的时候会有光标出现)/禁止输入法弹出问题
苹果端用1,2,之后解决不了readonly失效问题(点击的时候会有光标出现)(且不方便用disabled的时候),就用3, 1, $("#appDateTime").foc ...
- sh_09_格式化输出
sh_09_格式化输出 # 定义字符串变量 name,输出 我的名字叫 小明,请多多关照! name = "大小明" print("我的名字叫 %s,请多多关照!&quo ...
- Qt中图元对象的多重集成
在继承自定义QGraphicsItem图元对象时,有时需要用到信号/槽机制,由于QGraphicsItem非QObject的子类 所以需要多重继承QObject,有一点需要特别注意:就是继承的顺序,一 ...
- BZOJ 3329: Xorequ(数位dp+递推)
传送门 解题思路 可以把原式移项得\(x\)^\(2x\)=\(3x\),而\(x+2x=3x\),说明\(x\)二进制下不能有两个连续的\(1\).那么第一问就是一个简单的数位\(dp\),第二问考 ...
- Windows10主机插入耳机只有一边有声音
Windows10主机插入耳机只有一边有声音 在网上看了好几个版本,排除了主机插孔和耳机本身的问题,根据一篇文章在声音设置中找到了答案,原文章不是windows10,所以我找了好一会才找到,所以特地写 ...
- [CERC2016]:凸轮廓线Convex Contour(模拟+数学)
题目描述 一些几何图形整齐地在一个网格图上从左往右排成一列.它们占据了连续的一段横行,每个位置恰好一个几何图形.每个图形是以下的三种之一:$1.$一个恰好充满单个格子的正方形.$2.$一个内切于单个格 ...
- SSM整合--------试题分析
- Hibernate入门简介
什么是Hibernate框架? Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取 ...