社区讨论
90pts 求调Wa#8
P1462通往奥格瑞玛的道路参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @m2mx4z9s
- 此快照首次捕获于
- 2024/10/24 14:24 去年
- 此快照最后确认于
- 2025/11/04 16:21 4 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int M=1e5+5,N=1e4+5,inf=2147483647;
struct edge{
int start,end,c;
}e[M];
int n,m,b;
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
int dis[N],vis[N];
int cost[N];
int head[M],cnt=0;
inline void add(int u,int v,int c){
e[++cnt].end=v;
e[cnt].start=head[u];
head[u]=cnt;
e[cnt].c=c;
}
int dijkstra(int money){
for(int i=1;i<=n;i++){
dis[i]=1e9;vis[i]=0;
}
dis[1]=0;
if(money<cost[1]) return 0;
q.push(make_pair(dis[1],1));
while(!q.empty()){
int u=q.top().second;
q.pop();
if(vis[u]) continue;
vis[u]=1;
for(int i=head[u];i;i=e[i].start){
int v=e[i].end;
if(cost[v]>money) continue;
// if(vis[v]) continue;
if(dis[v]>dis[u]+e[v].c&&vis[v]==0){
dis[v]=dis[u]+e[v].c;
q.push(make_pair(dis[v],v));
}
}
}
// cout<<dis[n];
if(dis[n]<=b){
return 1;
}else{
return 0;
}
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
// freopen("","r")
int u,v,c;
int l=0,r=0;
cin>>n>>m>>b;
for(int i=1;i<=n;i++){
cin>>cost[i];
r=max(r,cost[i]);
}
for(int i=1;i<=m;i++){
cin>>u>>v>>c;
add(u,v,c);
add(v,u,c);
}
r=1000000005;
if(dijkstra(r)==0){
cout<<"AFK";
return 0;
}
while(l<r){
int mid=(l+r)/2;
if(dijkstra(mid)==0){
l=mid+1;
}else{
r=mid;
}
}
cout<<l;
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...