WA最后两个点,求助
#include<bits/stdc++.h>
#define INF 1e9;
using namespace std;
const int N=1000100;
int n,m,b;
int ff[N],d[N];
int head[N],to[N],net[N],E;
struct node{
int dis , u;
bool operator<(const node & cmp )const{
return dis>cmp.dis;
}
};
void init(){
E=0;
memset(head,-1,sizeof(head));
}
int w[N];
void add( int a , int b , int c ){
to[E] = b;
net[E] = head[a];
head[a] = E;
w[E] = c;
E++;
}
bool use[N];
priority_queue< node > q;
bool bfs(int x){
if(ff[1]>x) return false;
memset(use,false,sizeof(use));
for( int i = 1 ; i < n+1 ; i++ ) d[i] = INF;
node s;s.dis = 0;s.u = 1;d[1] = 0;q.push(s);
while(!q.empty()){
node f = q.top();q.pop();
if(use[f.u]==true) continue;
use[f.u]=true;
int u=f.u;
for(int i=head[u];i!=-1;i=net[i]){
int v=to[i];
if(d[v]>d[u]+w[i] and ff[v]<=x){
d[v]=d[u]+w[i];
if(use[v]==false){
node t;
t.dis=d[v];
t.u=v;
q.push(t);
}
}
}
}
if(d[n]<b) return true;
else return false;
}
int main(){
init();
cin>>n>>m>>b;
int r=0;
for( int i = 1 ; i <= n ; i ++ ) cin>>ff[i],r=max(r,ff[i]);
for( int i = 1 ; i <= m ; i ++ ){
int x,y,z;
cin>>x>>y>>z;
add( x , y , z );
add( y , x , z );
}
if(!bfs(r)){
cout<<"AFK";
return 0;
}
int l=ff[1];
int qwq=r;
r++;
while(r>=l){
int mid=(l+r)/2;
if(bfs(mid)){
r=mid-1;
}
else l=mid+1;
}
//if(l==qwq) cout<<"AFK"<<endl;
cout<<l<<endl;
return 0;
}