【洛谷P1462】【二分+堆优化dij】
题目描述
在艾泽拉斯,有n个城市。编号为1,2,3,...,n。
城市之间有m条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联盟的攻击,进而损失一定的血量。
每次经过一个城市,都会被收取一定的过路费(包括起点和终点)。路上并没有收费站。
假设1为暴风城,n为奥格瑞玛,而他的血量最多为b,出发时他的血量是满的。
歪嘴哦不希望花很多钱,他想知道,在可以到达奥格瑞玛的情况下,他所经过的所有城市中最多的一次收取的费用的最小值是多少。
题目分析
题目说了那么多,其实就是让求在角色不死亡的情况下移动过程遇到的F[i]的最大值的最小值..【看到最大值的最小值就应该立马想到二分啊..然而蒟蒻终究是蒟蒻..没想到二分..而是无脑堆优化的使用dij..结果TLE到怀疑人生,看到别人的题解之后才想到用二分..orz..】
题意这样就很明白了 二分是一定要用的 这种问法基本十个有九个是要用二分
那么我们要二分什么呢 血量还是金钱呢
因为要求的是收费所以就二分金钱好了////
二分的条件就是 以当前值为最大值 ,不走大于二分值的点,然后用堆优化的dij判断是否连通就行了
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int maxn1=;
const int maxn2=;
const int maxn3=;
struct pot{
int id;
int rest;
bool operator <(const struct pot&AA)const{
return rest < AA.rest;
}
};
struct edge{
int next;
int to;
int len;
}EDGE[maxn2*+];
int dist[maxn1+],head[maxn1+],dist1[maxn1+];
int n,m,b;
int edge_cnt=;
priority_queue<struct pot>pq;
void add(int x,int y,int z)
{
EDGE[edge_cnt].to=y;
EDGE[edge_cnt].next=head[x];
EDGE[edge_cnt].len=z;
head[x]=edge_cnt++;
}
int mmin=-;
bool dij(int x)
{
memset(dist1,,sizeof(dist1));
while(!pq.empty())
{
pq.pop();
}
pq.push((struct pot){,b});
while(!pq.empty())
{
struct pot aa=pq.top();pq.pop();
if(aa.rest<dist1[aa.id])continue;
for(int i = head[aa.id]; i != - ; i=EDGE[i].next)
{
int v=EDGE[i].to;
if(dist[v]<=x&&aa.rest-EDGE[i].len>)
{
if(v==n){
return true;
}
if(dist1[v]<aa.rest-EDGE[i].len)
{
dist1[v]=aa.rest-EDGE[i].len;
pq.push((struct pot){v,aa.rest-EDGE[i].len});
}
}
}
}
return false;
}
int main()
{
scanf("%d%d%d",&n,&m,&b);
int r=;
for(int i = ; i <= n ; i++)
{
scanf("%d",&dist[i]);
r=max(r,dist[i]);
}
memset(head,-,sizeof(head));
while(m--)
{
int q,w,e;
scanf("%d%d%d",&q,&w,&e);
add(q,w,e);
add(w,q,e);
}
int l=max(dist[],dist[n]);
bool flag=false;
while(l<=r)
{
int mid=(l+r)/;
if(dij(mid)){
r=mid-;
flag=true;
}
else
{
l=mid+;
}
}
if(!flag)
printf("AFK\n");
else
cout << l<< endl;
return ;
}

【洛谷P1462】【二分+堆优化dij】的更多相关文章
- 洛谷P1462 通往奥格瑞玛的道路(二分+spfa,二分+Dijkstra)
洛谷P1462 通往奥格瑞玛的道路 二分费用. 用血量花费建图,用单源最短路判断 \(1\) 到 \(n\) 的最短路花费是否小于 \(b\) .二分时需要不断记录合法的 \(mid\) 值. 这里建 ...
- B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij
B20J_2007_[Noi2010]海拔_平面图最小割转对偶图+堆优化Dij 题意:城市被东西向和南北向的主干道划分为n×n个区域.城市中包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向 ...
- [CF1209F]Koala and Notebook_堆优化dij
Koala and Notebook 题目链接:https://codeforces.com/contest/1209/problem/F 数据范围:略. 题解: 开始的时候看错题了....莫名其妙多 ...
- [CF1146D]Frog Jumping_exgcd_堆优化dij
Frog Jumping 题目链接:http://codeforces.com/contest/1146/problem/D 数据范围:略. 题解: 首先发现,如果$x\ge a +b$,那么所有的$ ...
- 洛谷 P1462 通往奥格瑞玛的道路(二分答案,堆优化dijkstra)
传送门 解题思路 首先看题目问题,求经过的所有城市中最多的一次收取的费用的最小值是多少.一看“最大值最小”就想到了二分答案. 在读一遍题目,就是二分收取的费用,然后对于每一个二分的费用,跑一边最短路, ...
- P1462 通往奥格瑞玛的道路[最短路+二分+堆优化]
题目来源:洛谷 题目背景 在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目描 ...
- 洛谷 P1462 通往奥格瑞玛的道路
洛谷 题意:要求在限定油耗内,求最小花费的最大值. 求最小值最大很容易想到二分答案.所以我们往二分的方向去想. 我们二分一个费用,然后要保证到终点时满足限定油耗,所以跑最短路. 不过松弛条件要改一下: ...
- Guard Duty (medium) Codeforces - 958E2 || (bzoj 2151||洛谷P1792) 种树 || 编译优化
https://codeforces.com/contest/958/problem/E2 首先求出N个时刻的N-1个间隔长度,问题就相当于在这些间隔中选K个数,相邻两个不能同时选,要求和最小 方法1 ...
- Lightning Conductor 洛谷P3515 决策单调性优化DP
遇见的第一道决策单调性优化DP,虽然看了题解,但是新技能√,很开森. 先%FlashHu大佬,反正我是看了他的题解和精美的配图才明白的,%%%巨佬. 废话不多说,看题: 题目大意 已知一个长度为n的序 ...
随机推荐
- img srcset 和 sizes
img srcset 和 sizes 诞生的目的是解决图片清晰度和节省加载图片大小问题,比方说我需要在retina高的硬件上看到更细腻的图片,又或者我要在电脑看到的图片和在手机上的图片不一样. 解 ...
- 【python】模块整理
---文件.系统--- import glob # 给定路径下查找符合规则文件.三个匹配符:”*”, “?”, “[]”.”*”匹配0个或多个字符:”?”匹配单个字符:”[]”匹配指定范围内的字符, ...
- [.NET开发] C# 读写文件
1.C#读文件 按行读取文件: public void Read(string path) { StreamReader sr = new StreamReader(path,Encoding.Def ...
- Silverlight自定义控件系列 – TreeView (4) 缩进
接下来是缩进,没有缩进的Tree怎么看都不顺眼. 首先,定义节点深度Depth(注:回叫方法暂没有代码,以后要用到): 1: /// <summary> 2: /// Using a De ...
- Mysql查询用逗号分隔的字段-字符串函数FIND_IN_SET(),以及此函数与in()函数的区别
查询用逗号分隔的字段,可以用字符串函数FIND_IN_SET(): 查询数据库表中某个字段(值分行显示),可以用函数in(). 今天工作中遇到一个问题,就是用FIND_IN_SET()函数解决的. 第 ...
- 最应该注意的Oracle版本之一
最近以来,两个用户的库接连出现问题,经过查阅资料和分析,确定为数据库bug所致,其实,早在很久前,也遭遇过这个版本的类似bug,当时似乎还惊动了原厂的技术人员,后来确定为这个版本的bug,这个版本就是 ...
- bootstrap滑动开关插件使用
下载和演示插件地址 需要引入的css和js <link rel="stylesheet" type="text/css" href="/css/ ...
- jenkins安装笔记(一)
转载地址:https://www.cnblogs.com/sylvia-liu/p/4485311.html 自动化架构搭建过程中为实现当开发源码更新时自动化脚本同步触发自动执行,使用到持续集成工具J ...
- forget word out a~2
1● an 不,非,无 2● amphi 两个,两种 3● ad 做,加强:
- Python Django 前后端数据交互 之 前端向后端发送数据
Python Django 之 前端向后端发送数据