洛谷1462 通往奥格瑞玛的道路 最短路&&二分
2024-08-31 15:39:05
SPFA和二分的使用
跑一下最短路看看能不能回到奥格瑞玛,二分收费最多的点
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
#define maxn 10005
#define maxm 50005
#define inf 2000000000 int n,m,b,cnt,ans;
int c[maxn],dis[maxn];
int head[maxm];
bool vis[maxn];
struct edge{
int next,to,w;
}e[maxm<<];
void insert(int u,int v,int k){
cnt++;
e[cnt].next=head[u];e[cnt].to=v;e[cnt].w=k;
head[u]=cnt;
}
bool spfa(int x){
queue<int> q;
memset(vis,,sizeof vis);
memset(dis,0x3f,sizeof dis);
vis[]=;dis[]=;
q.push();
while(!q.empty()){
int now=q.front();
q.pop();vis[now]=;
for(int i=head[now];i;i=e[i].next){
int k=e[i].to;
if(c[k]>x)continue;
if(dis[k]>dis[now]+e[i].w){
dis[k]=dis[now]+e[i].w;
if(!vis[k]){
vis[k]=;
q.push(k);
}
}
}
}
if(b-dis[n]<=||dis[n]==inf)return ;
return ;
}
int main(){
int l=,r=;
scanf("%d%d%d",&n,&m,&b);
for(int i=;i<=n;i++){
scanf("%d",&c[i]);
r=max(r,c[i]);
}
int u,v,k;
for(int i=;i<=m;i++){
scanf("%d%d%d",&u,&v,&k);
insert(u,v,k);
insert(v,u,k);
}
if(spfa(inf)){
int mid=(l+r)>>;
while(l<=r){
if(spfa(mid)){
r=mid-;
ans=mid;
}
else l=mid+;
mid=(l+r)>>;
}
printf("%d\n",ans);
}
else printf("AFK\n");
return ;
}
最新文章
- 关于安卓工程导出带res资源文件的jar的总结
- C/C++实践笔记_001Helloworld
- NIO中Selector分析
- js数组与字符串的相互转换方法
- C++重要知识点小结---1
- js学习笔记第二篇
- 【HDOJ】3337 Guess the number
- 《Linear Algebra and Its Applications》-chaper3-行列式-行列式初等变换
- sqlserver 进行MD5加密
- Twenty Newsgroups Classification实例任务之TrainNaiveBayesJob(一)
- Hadoop-2.6.5安装
- windows远程桌面神器
- .NET Core----七牛云图片上传
- SQL 获取表结构
- flask实战-留言板-Web程序开发流程
- 在vue中使用watch监听对象或数组
- webpack中 resolve.alias 配置,@import相关踩坑
- html5学习笔记3——高级特性
- 移动端(微信等)使用 vConsole 调试 console
- Cache Server