题目链接

  导致我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 ;
}

最新文章

  1. vue+ vue-router + webpack 踩坑之旅
  2. dom节点的操作
  3. Scala的第一步
  4. LintCode Interleaving String
  5. 高频交易[z]
  6. (笔记)Linux内核学习(七)之内核同步机制和实现方式
  7. k Sum | &amp; ||
  8. Template
  9. Java内存分配全面浅析(转)
  10. 通常编译亲测56Y国际象棋源代码,精仿56Y国际象棋完整的源代码下载!
  11. LeetCode OJ 104. Maximum Depth of Binary Tree
  12. 请小心使用 ng-repeat 中的 $index
  13. 2.3MySQL 自带工具使用介绍
  14. Maven把项目依赖的所有jar包都打到同一个jar中
  15. java.lang.UnsatisfiedLinkError:dlopen failed: “**/*/arm/*.so” has unexpected e_machine: 3
  16. 去除菜单项的加速键--‘&amp;’符号
  17. sublimit 编辑器 设置默认的编码
  18. 安装mysql(macos系统)
  19. appium自动化测试(四)
  20. 杭电OJ第11页2010-2019道题(C语言)

热门文章

  1. Smack+OpenFire搭建IM通信,包含心跳和自动重连(Android实现)
  2. [原创] SOAP UI 创建SOAP工程进行接口测试
  3. jmeter中通过命令方式生成结果文件
  4. LR常用函数汇总
  5. How to install Eclipse in linux
  6. 状态压缩---状态压缩dp第一题
  7. Maven项目报错:Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clea
  8. 搭建一个入门springboot工程
  9. 将回车键转换为Tab键
  10. 新数据的GT列表