#include<bits/stdc++.h>
using namespace std;
const long long INF=1e18+7;
vector<pair<long long,long long> >g[1000001];
long long dis[1000001],a[1000001],n,m,b,maxn=-1;
bool vis[1000001];
priority_queue<pair<long long,long long>,vector<pair<long long,long long> >,greater<pair<long long,long long> > > q;
bool check(long long t)
{
if(a[1]>t)return false;
for(long long i=1;i<=n;i++)dis[i]=INF,vis[i]=0;
dis[1]=0;
q.push(make_pair(0,1));
while(!q.empty())
{
pair<long long,long long> tp=q.top();
long long MXid=tp.second;
q.pop();
if(MXid==n)
{
if(dis[n]<=b)return true;
else return false;
}
if(vis[MXid]==1)continue;
vis[MXid]=1;
for(long long j=0;j<g[MXid].size();j++)
{
long long ed=g[MXid][j].first,eg=g[MXid][j].second;
if(a[ed]>t)continue;
if(dis[ed]>dis[MXid]+eg)
{
dis[ed]=dis[MXid]+eg;
q.push(make_pair(dis[ed],ed));
}
}
}
while(!q.empty())q.pop();
return false;
}
int main()
{
cin>>n>>m>>b;
for(long long i=1;i<=n;i++)
{
cin>>a[i];
maxn=max(maxn,a[i]);
}
for(long long i=1;i<=m;i++)
{
long long u,v,w;
cin>>u>>v>>w;
g[u].push_back(make_pair(v,w));
g[v].push_back(make_pair(u,w));
}
long long l=1,r=maxn;
while(r>=l)
{
long long mid=(l+r)/2;
if(check(mid))r=mid-1,maxn=mid;
else l=mid+1;
}
if(maxn==-1)cout<<"AFK";
else cout<<maxn;
return 0;
}
第1、4、7个点WA了,本人能力有限感觉看不出哪里有问题。(目测应该是判断不了AFK的情况)