QwQ马上高二啦不能颓啦…知乎上听说写博客的效果挺好的,来试一下好啦~


题目链接<<

题目描述

在艾泽拉斯,有n个城市。编号为1,2,3,...,n。

城市之间有m条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联盟的攻击,进而损失一定的血量。

每次经过一个城市,都会被收取一定的过路费(包括起点和终点)。路上并没有收费站。

假设1为暴风城,n为奥格瑞玛,而他的血量最多为b,出发时他的血量是满的。

歪嘴哦不希望花很多钱,他想知道,在可以到达奥格瑞玛的情况下,他所经过的所有城市中最多的一次收取的费用的最小值是多少。


orz一开始就像其中一个题解一样直接跑两遍spfa,然后是wa掉了一个点(后来看了看题解发现这种方法是错误的(不过居然才wa了一个点…

好叭我最后还是老老实实写了二分(然而这里我又智障了没开long long结果wa了好多次还没发现…)

嗯那么做法就是先跑一边最短路spfa,看一下这种情况下能否到达终点,不能的话直接输出AFK(_(:з」∠)_话说为啥是AFK?)

然后如果可以的话就给f[]排个序对f[]进行二分,如果当前的值太小的话就往大的找否则往小的找(QwQ哦千万不能像我一样一开始还把边集数组开小了…

最后贴上长得不太好看的代码x(代码:喵喵喵?

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std; const int INF=0x7f7f7f7f;
const int M=100005;
const int N=10005; struct edge{int to,weight,next;}edges[M];
int head[N],cnt;
int n,m,b,l,r,ans;long long dis[N];
int f[N],temp[N];
queue<int>q;bool inQ[N]; inline void addEdge(int u,int v,int w)
{
edges[++cnt]=(edge){v,w,head[u]};
head[u]=cnt;
}
inline int read()
{
int s=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){s=s*10+c-'0';c=getchar();}
return s*f;
}
inline bool spfa(int s)
{
memset(dis,0x7f,sizeof(dis));
memset(inQ,0,sizeof(inQ));
dis[1]=0;inQ[1]=1;q.push(1);
while(!q.empty()){
int cur=q.front();q.pop();
inQ[cur]=0;
for(int i=head[cur];i;i=edges[i].next)
{
if(f[edges[i].to]>s)continue;
if(dis[edges[i].to]>dis[cur]+edges[i].weight)
{
dis[edges[i].to]=dis[cur]+edges[i].weight;
if(!inQ[edges[i].to]){q.push(edges[i].to);inQ[edges[i].to]=1;}
}
}
}
if(dis[n]>=b||dis[n]==dis[0])return 0;
return 1;
}
int main()
{
n=read();m=read();b=read();
for(int i=1;i<=n;i++)f[i]=temp[i]=read();
for(int i=1;i<=m;i++)
{
int u,v,w;
u=read();v=read();w=read();
addEdge(u,v,w);addEdge(v,u,w);
}
if(!spfa(INF))printf("AFK");
else{
sort(temp+1,temp+n+1);
temp[n+1]=temp[n]+1;
l=1;r=n+1;
while(r-l>1)
{
int mid=l+r>>1;
if(spfa(temp[mid]))r=mid,ans=temp[mid];
else l=mid;
}printf("%d",ans);
}
return 0;
}

View Ugly Code =w=

[水题日常]Luogu1462 通往奥格瑞玛的道路的更多相关文章

  1. [Luogu1462]通往奥格瑞玛的道路

    题目大意: 一个n个点,m条边的图,每个边有一个边权,每个点也有一个点权. 现在要找一条从1到n的路径,保证边权和不超过b的情况下,最大点权尽量小. 问最大点权最小能是多少? 思路: 二分答案,然后D ...

  2. P1462 通往奥格瑞玛的道路

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

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

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

  4. Luogu P1462 通往奥格瑞玛的道路(最短路+二分)

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

  5. [Luogu P1462] 通往奥格瑞玛的道路 (二分答案+最短路径)

    题面 传送门:https://www.luogu.org/problemnew/show/P1462 Solution 这道题如果去除掉经过城市的收费.那么就是裸的最短路 但是题目要求经过城市中最多的 ...

  6. P1462 通往奥格瑞玛的道路 (二分+最短路)

    题目 P1462 通往奥格瑞玛的道路 给定\(n\)个点\(m\)条边,每个点上都有点权\(f[i]\),每条边上有边权,找一条道路,使边权和小于给定的数\(b\),并使最大点权最小. 解析 二分一下 ...

  7. 【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路

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

  8. 最短路【洛谷P1462】 通往奥格瑞玛的道路

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

  9. AC日记——通往奥格瑞玛的道路 洛谷 P1462

    通往奥格瑞玛的道路 思路: 二分+spfa: 二分最大费用,然后判断只走小于等于二分答案的点是否可以花费小于体力上限的血量: 来,上代码: #include <cstdio> #inclu ...

随机推荐

  1. 厉害啊!第一次见到把Shiro运行流程写的这么清楚的,建议收藏起来慢慢看

    前言 shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证.用户授权. spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖 ...

  2. IDM下载器的队列功能有什么用?

    使用IDM下载器中的队列功能,可以帮助大家快速分类下载任务,这样,就可以统一管理有同样下载需求的内容. 一.队列的添加及设置 打开IDM下载器,单击菜单中的"队列",可以看到在左侧 ...

  3. FL Studio12如何进行图示编辑

    FL Studio在国内被大家 亲切的称为"水果"深受喜爱玩电音的音乐人的追捧,本章节采用图文结合的方式给大家讲解它的FL Studio12是如何进行图示编辑的. 单击图示按钮可以 ...

  4. Luogu P2656 采蘑菇

    尽管是缩点的习题,思路也是在看了题解后才明白的. 首先,每个强连通分量内的点都是一定互通的,也就是可以完全把这里面的边都跑满,摘掉所有能摘的蘑菇.那么,考虑给每一个强连通分量化为的新点一个点权,代表摘 ...

  5. web端项目如何测试

    1.是否支持各种网络 2.网络如果演示能否正常加载 3.加载时断网还能加载出来么 4.浏览时断网页面是否保持 5.是否兼容各种不同的浏览器 6.不同的浏览器加载出的页面是否一致 7.页面效果如何 8. ...

  6. python应用(6):函数

    在流程很简单的时候,或者流程不简单但我们不需要考虑开发维护成本的时候,平面地组织你的代码就够了,不用费脑子,不需要考虑层次或重用的东西.当事情变得越来越复杂时,当同行对代码质量要求越来越高时,有一些重 ...

  7. ASP.NET Core管道详解[6]: ASP.NET Core应用是如何启动的?[下篇]

    要承载一个ASP.NET Core应用,只需要将GenericWebHostService服务注册到承载系统中即可.但GenericWebHostService服务具有针对其他一系列服务的依赖,所以在 ...

  8. ModelViewSet基础操作

    1 安装DjangoRestFramework pip install djangorestframework==3.11.1 2.在settings.py中注册 INSTALLED_APPS = [ ...

  9. Spring Cloud Alibaba 初体验(四) Sentinel

    一.Sentinel 下载与运行 本文使用 Sentinel 1.7.1:https://github.com/alibaba/Sentinel/releases 使用自定义端口 8089 运行 Se ...

  10. JMeter 安装 启动(即中文的修改)

    一.安装 (1).java 和 apache-jmeter-4.0 2.点击apache-jmeter-4.0进入bin目录,点击jmeter.bat 如果没有安装java就会出现下图 遇到上面是因为 ...