【Luogu】P1462通往奥格瑞玛的道路(二分答案+SPFA)
2024-08-27 16:39:56
导致我WA十几遍的原因居然是最大值不够大……以后再也不相信memset(dis,127/3,sizeof(dis))了。
此题先将花费排序,然后二分最大花费,spfa判断解是否可行。spfa的时候遇到一个大于当前二分的花费的点就跳过。如果起点的点权超过了这个花费,或者最后到达n时的最短路径超过了歪嘴哦的血量,则当前解不可用,l=mid+1.否则记录当前答案,r=mid-1。
代码如下
#include<cstdio>
#include<cctype>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} struct Edge{
int next,to,dis;
}edge[];
int head[],num;
int dis[];
inline void add(int from,int to,int dis){
edge[++num]=(Edge){head[from],to,dis};
head[from]=num;
} int que[];
int cost[]; int f[],h,t=;
bool vis[];
long long ans=-;
int main(){
int n=read(),m=read(),Max=read();
for(int i=;i<=n;++i){
que[i]=read();
cost[i]=que[i];
}
sort(que+,que+n+);
for(int i=;i<=m;++i){
int from=read(),to=read(),dst=read();
add(from,to,dst);
add(to,from,dst);
}
int l=,r=n;
while(l<=r){
int mid=(l+r)>>;
for(int i=;i<=n;++i) dis[i]=;
memset(vis,,sizeof(vis));
int limit=que[mid];
f[]=;h=;t=;dis[]=;
while(h++<t){
vis[f[h]]=;
for(int i=head[f[h]];i;i=edge[i].next){
if(cost[edge[i].to]>limit) continue;
if(dis[f[h]]+edge[i].dis<dis[edge[i].to]){
dis[edge[i].to]=dis[f[h]]+edge[i].dis;
if(!vis[edge[i].to]){
vis[edge[i].to]=;
f[++t]=edge[i].to;
}
}
}
}
if(dis[n]>=Max||cost[]>limit) l=mid+;
else{
ans=que[mid];
r=mid-;
}
}
if(ans==-) printf("AFK");
else printf("%lld",ans);
return ;
}
最新文章
- vue+ vue-router + webpack 踩坑之旅
- dom节点的操作
- Scala的第一步
- LintCode Interleaving String
- 高频交易[z]
- (笔记)Linux内核学习(七)之内核同步机制和实现方式
- k Sum | &; ||
- Template
- Java内存分配全面浅析(转)
- 通常编译亲测56Y国际象棋源代码,精仿56Y国际象棋完整的源代码下载!
- LeetCode OJ 104. Maximum Depth of Binary Tree
- 请小心使用 ng-repeat 中的 $index
- 2.3MySQL 自带工具使用介绍
- Maven把项目依赖的所有jar包都打到同一个jar中
- java.lang.UnsatisfiedLinkError:dlopen failed: “**/*/arm/*.so” has unexpected e_machine: 3
- 去除菜单项的加速键--‘&;’符号
- sublimit 编辑器 设置默认的编码
- 安装mysql(macos系统)
- appium自动化测试(四)
- 杭电OJ第11页2010-2019道题(C语言)
热门文章
- Smack+OpenFire搭建IM通信,包含心跳和自动重连(Android实现)
- [原创] SOAP UI 创建SOAP工程进行接口测试
- jmeter中通过命令方式生成结果文件
- LR常用函数汇总
- How to install Eclipse in linux
- 状态压缩---状态压缩dp第一题
- Maven项目报错:Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clea
- 搭建一个入门springboot工程
- 将回车键转换为Tab键
- 新数据的GT列表