原题:http://www.luogu.org/problem/show?pid=1462#sub

4boy:

大意:给出n个城市,有m条路,每经过一个城市都要交钱,每经过一条道路都要扣HP,有HP上限;要从1走到n,

求在HP没扣完的情况下,从1到n经过城市的最大花费的最小值。

思路:用二分搜索cost的值的最小值,用spfa搜索从1到n所需的最少HP,在spfa中判断cost[i]与x详见代码注释;

 #include<iostream>
#include<cstring>
#include<queue>
#define maxn 100000
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
queue<int> q;
int n,m;
int edgenum=,link[maxn],v[maxn];
ll b,ans=-,max_c=-,cost[maxn],dis[maxn];
struct EDGE //边表优化
{
int v,next;
ll val;
EDGE(){next=;}
}edge[maxn];
void add(int a,int b,int x)
{
edgenum++;
edge[edgenum].v=b;
edge[edgenum].val=x;
edge[edgenum].next=link[a];
link[a]=edgenum;
}
void init()
{
cin>>n>>m>>b;
for(int i=;i<=n;i++)
{
cin>>cost[i];
max_c=max(max_c,cost[i]);
}
int x,y,l;
for(int i=;i<=m;i++)
{
cin>>x>>y>>l;
add(x,y,l);
add(y,x,l);
}
}
bool spfa(ll x)
{
memset(dis,INF,sizeof(dis));
memset(v,,sizeof(v));
dis[]=;
v[]=;
q.push();
while(!q.empty())
{
int temp=q.front();
q.pop();
v[temp]=;
for(int i=link[temp];i!=;i=edge[i].next)
{
if(cost[edge[i].v]>x) continue; //此城市的cost>期望最小值x,则跳过
if(dis[edge[i].v]>dis[temp]+edge[i].val)
{
dis[edge[i].v]=dis[temp]+edge[i].val;
if(!v[edge[i].v])
{
q.push(edge[i].v);
v[edge[i].v]=;
}
}
}
}
if(dis[n]>b || dis[n]==(ll)INF) return false; //最短路的HP>上限 || 不通 则false
return true;
}
void work()
{
ll mid;
ll l=,r=max_c;
while(l<=r)
{
mid=(r+l)>>;
if(spfa(mid)==true) //已mid为值的cost可通,记录答案并搜索区间左移
{
r=mid-;
ans=mid;
}
else //不通,搜索区间右移
{
l=mid+;
}
}
if(ans==-) cout<<"AFK";
else cout<<ans;
}
void pt()
{
//if(spfa(10)) cout<<"fuck you";
}
int main()
{
init();
work();
//pt();
//system("pause");
return ;
}

还有,请叫我子程序狂魔=-=

洛谷 P1462 通往奥格瑞玛的道路(spfa+二分搜索)(4boy)的更多相关文章

  1. 洛谷P1462 通往奥格瑞玛的道路(SPFA+二分答案)

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

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

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

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

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

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

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

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

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

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

    洛谷 题意:要求在限定油耗内,求最小花费的最大值. 求最小值最大很容易想到二分答案.所以我们往二分的方向去想. 我们二分一个费用,然后要保证到终点时满足限定油耗,所以跑最短路. 不过松弛条件要改一下: ...

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

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

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

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

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

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

随机推荐

  1. 九度oj 题目1490:字符串链接

    题目1490:字符串链接 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2610 解决:1321 题目描述: 不用strcat 函数,自己编写一个字符串链接函数MyStrcat(char ...

  2. 【转】Java的path,classpath,java_home环境变量的配置与具体含义

    对于一个Java初学者来说,第一步要做的是安装jdk并配置环境变量,一般按照书上或者网上的步骤,一步步照着做就行了,但是对于初学者来说,很多问题没有解决,比如为什么很多配置方法各不相同,却都能够配置成 ...

  3. android开发里跳过的坑——“org.apache.http.message.BasicHeaderValueFormatter.INSTANCE”错误

    在android4.4.2的系统里,写了一个系统应用,其中有一个功能是通过表单上传图片的,使用了httpclient-4.5.3.jar httpmime-4.5.3.jar httpcore-4.4 ...

  4. windows PHP配置随笔

    这几天配置本地windows wnmp(windows + nginx + mysql + php 5.3)遇到了不少问题.决定以后随笔记下解决的问题. #php.ini 配置含路径的值时,要注意把使 ...

  5. HDU 5950 Recursive sequence 递推转矩阵

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  6. Ubuntu 16.04安装unrar解压RAR文件

    除了7zip:http://www.cnblogs.com/EasonJim/p/7124306.html之外,还可以安装unrar进行解压RAR文件. 安装 sudo apt-get install ...

  7. jmeter的master-slave模式

    要求: 1.相同的jmeter版本 2.最好相同的java版本 jmeter可以通过master-slave的方式实现更大的并发,但是作为master的机器将会消耗更多的资源,因为所有的slave的压 ...

  8. 改變iTunes備份路徑

    *** 在任意分區建立文件夾用來移動iTunes原有備份 *** 例如:move"c:\user\vhd\appdata\roaming\apple computer"全部到&qu ...

  9. C#如何发布项目 发布软件

    如下图所示,我随便搞了一个小软件,为了测试还在Debug目录下放了一个一副图片和一个LOGO   直接点击生成-发布 "软件名称",然后点击完成   结果报错说没找到SignToo ...

  10. 慎用Outline ,UGUI Outline实现原理分析

    使用 UGUI 制作背包的时候.同事发现假设背包中加入了大量的物品.比方两百个.Unity就会出错,提示 Canvas element contains more than 65535 vertice ...