洛谷

题意:要求在限定油耗内,求最小花费的最大值。

求最小值最大很容易想到二分答案。所以我们往二分的方向去想。

我们二分一个费用,然后要保证到终点时满足限定油耗,所以跑最短路。

不过松弛条件要改一下:

增加条件,即:\(cost[to]<mid\)。

最后判断\(dis[end]\leq S\),满足返回true,否则就false。

值得注意的是:这题是双倍经验T。稍微改一点点就好了。

另一题

上面这个最后不满足是输出-1,而且起点终点要输入。还有,SPFA会被卡,可以考虑堆优化dijkstra或者SLF优化。

代码(我是用的SLF优化SPFA):

#include <bits/stdc++.h>
using namespace std; const int N=10005;
int n,m,st,ed,r,l,oil;
int s[N<<4][3],o[N],cnt,a[N],ans=-1,dis[N];
deque <int> q; void read(int &aa)
{
aa=0;char c=getchar();
while (c>'9'||c<'0') c=getchar();
while (c>='0'&&c<='9')
aa=(aa<<3)+(aa<<1)+(c^48),c=getchar();
} void add(int x,int y,int c)
{
s[++cnt][0]=y,s[cnt][1]=o[x],s[cnt][2]=c,o[x]=cnt;
} bool check(int mid)
{
if (a[st]>mid) return 0;
for (int i=1;i<=n;++i) dis[i]=1e9;
dis[st]=0;
q.push_front(st);
while (!q.empty()) {
int x=q.front();
q.pop_front();
for (int i=o[x];i;i=s[i][1]) {
int y=s[i][0];
if (a[y]<=mid&&dis[y]>dis[x]+s[i][2]) {
dis[y]=dis[x]+s[i][2];
if (!q.empty()&&dis[y]<dis[q.front()])
q.push_front(y);
else q.push_back(y);
}
}
}
if (dis[ed]<=oil) return 1;
return 0;
} int main()
{
int x,y,c;
read(n),read(m),read(oil);
st=1,ed=n;
for (int i=1;i<=n;++i)
read(a[i]),r=max(r,a[i]);
for (int i=1;i<=m;++i) {
read(x),read(y),read(c);
add(x,y,c),add(y,x,c);
}
while (l<=r) {
int mid=l+r>>1;
if (check(mid)) r=mid-1,ans=mid;
else l=mid+1;
}
if (ans==-1) puts("AFK");
else cout<<ans<<endl;
return 0;
}

洛谷 P1462 通往奥格瑞玛的道路的更多相关文章

  1. 洛谷P1462 通往奥格瑞玛的道路(二分+spfa,二分+Dijkstra)

    洛谷P1462 通往奥格瑞玛的道路 二分费用. 用血量花费建图,用单源最短路判断 \(1\) 到 \(n\) 的最短路花费是否小于 \(b\) .二分时需要不断记录合法的 \(mid\) 值. 这里建 ...

  2. 洛谷 P1462 通往奥格瑞玛的道路 解题报告

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

  3. 洛谷——P1462 通往奥格瑞玛的道路

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

  4. 洛谷 P1462 通往奥格瑞玛的道路 题解

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

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

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

  6. 洛谷 P1462 通往奥格瑞玛的道路 Label: 最小化最大值 && spfa (存多条边示例)

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

  7. 洛谷P1462通往奥格瑞玛的道路题解

    [题目]: https://www.luogu.org/problemnew/show/P1462 题意 题目是给定了一张双向边,有边权的图,然后让我们求出一个最小值,满足一条路径上的最大的费用小于这 ...

  8. 洛谷P1462 通往奥格瑞玛的道路

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

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

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

随机推荐

  1. Python绘制分段函数

    1.绘制分段函数:y=4sin(4πt)-sgn(t-0.3)-sgn(0.72-t) import numpy as npimport matplotlib.pyplot as plt#绘制分段函数 ...

  2. js var ImgObj=new Image();

    API地址: 1 https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement 下面来看看Image到底是个什么东东,我先将Ima ...

  3. LeetCode之小孩分糖果

    给定一群站好队的小孩而且按某项分值排名(姑且如果为年龄吧),年龄大的要比他身边年龄小的拿的糖要多.求怎么分配糖果使得分配的糖果数最少. 用一个数组从左到右再从右到左的遍历,向前遍历时若右边的比左边的大 ...

  4. Redis(四):常用数据类型和命令

    命令手册网址 http://doc.redisfans.com/ Redis数据类型 l String l Hash l List l Set l Sorted Set Redis中还有3种特殊的数据 ...

  5. [ci]sonar sonar-runner安装并实现手动扫描项目

    安装sonar: 下载地址:https://www.sonarqube.org/downloads/ wget https://sonarsource.bintray.com/Distribution ...

  6. div横向排列

    在网页布局中,常常有几个div横向排列的需求,此时,可以采用浮动的方式: 1.左右浮动: <div class="main"> <div class=" ...

  7. NYOJ 诡异的电梯 && nyoj 1204 魔法少女

    诡异的电梯[Ⅰ] 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 新的宿舍楼有 N(1≤N≤100000) 层 and M(1≤M≤100000)个学生. 在新的宿舍楼里 ...

  8. CPU亲和力

    http://blog.chinaunix.net/uid-27714502-id-3515874.html http://www.tuicool.com/articles/I7NFzy http:/ ...

  9. 小米Note全网通支持7模19频:先发标准版

    2015-06-26 16:42:53 17749 次阅读 9 次推荐 稿源:安卓中国 43 条评论 感谢安卓中国的投递 自古一入电信深似海,从此手机没法买.现在首台全网通小米手机即将诞生.6 月 2 ...

  10. Android-X86 VirtualBox 安装安卓后的一些设置

    可以用虚拟机设置双显卡,一个用于调试,一个用于连接外网 一个桥接一个host only 安卓Home键 -> Win键 安装返回键 -> ESC键 ALT + F1 调出管理员控制台 AL ...