P1462,dij不知为何死循环,哪位大佬帮帮忙
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MAXN=0x7fffffff;
const int N=10005;
const int M=5*10005;
int n,m,b,tot;
int ver[M],edge[M],head[N],Next[M];
int f[N];
int l,r;
ll dis[N];
bool vis[N];
struct node{
int val,id;
bool operator <(const node b)const{
return val>b.val;
}
};
priority_queue<node>q;
void add(int x,int y,int z){
ver[++tot]=y,edge[tot]=z,Next[tot]=head[x],head[x]=tot;
}
bool dij(int pri){
memset(dis,0x3f,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[1]=0;
q.push(node{0,1});
while(!q.empty()){
int x=q.top().id; q.pop();
if(vis[x]) continue;
vis[x]=true;
for(int i=head[x];i;i=Next[i]){
int y=ver[i],z=edge[i];
if(dis[y]>dis[x]+z&&f[y]<=pri){
dis[y]=dis[x]+z;
q.push(node{dis[y],y});
}
}
}
return dis[n]<=b;
}
int main(){
cin>>n>>m>>b;
for(int i=1;i<=n;i++){
cin>>f[i];
r=max(r,f[i]);
}
l=max(f[1],f[n]);
for(int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
add(x,y,z);
add(y,x,z);
}
if(!dij(r)){
cout<<"AFK"<<endl;
return 0;
}
while(l<=r){
int mid=(l+r-1)>>1;
if(dij(mid)) r=mid;
else l=mid;
}
cout<<l<<endl;
return 0;
}