社区讨论
求调,悬关
P1462通往奥格瑞玛的道路参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @lz4uhdvt
- 此快照首次捕获于
- 2024/07/28 08:51 2 年前
- 此快照最后确认于
- 2024/07/28 09:12 2 年前
RT
CPP#include<bits/stdc++.h>
using namespace std;
const int maxx=1e9;
int n,m,b;
bool vis[10005];
int a[10005],dis[10005];
int head[20005],ne[20005],ver[20005],w[20005],tot=-1;
priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
void add(int x,int y,int z){
tot++;
ver[tot]=y;
w[tot]=z;
ne[tot]=head[x];
head[x]=tot;
}
bool dijkstra(int x){
if(x<a[1]) return 0;
for(int i=1;i<=n;i++) dis[i]=INT_MAX;
memset(vis,0,sizeof vis);
dis[1]=0;
q.push(make_pair(0,1));
int s1;
while(!q.empty()){
cout<<q.top().first<<" "<<q.top().first<<"\n";
s1=q.top().second;
q.pop();
if(vis[s1]) continue;
vis[s1]=1;
for(int i=head[s1];i!=-1;i=ne[i]){
if(a[ver[i]]<=x&&vis[ver[i]]==0&&dis[s1]+w[i]<dis[ver[i]]){
dis[ver[i]]=dis[x]+w[i];
q.push(make_pair(dis[ver[i]],ver[i]));
}
}
}
if(dis[n]<=b){
return 1;
}
return 0;
}
int main(){
memset(head,-1,sizeof head);
cin>>n>>m>>b;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
int a,b,c;
cin>>a>>b>>c;
add(a,b,c);
add(b,a,c);
}
if(dijkstra(maxx)){
cout<<"AFK";
return 0;
}
int l=1,r=maxx;
while(l<=r){
int mid=(l+r)/2;
if(dijkstra(mid)){
r=mid-1;
}else{
l=mid+1;
}
}
cout<<l;
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...