#include<bits/stdc++.h>
#define inf 1e18
#define mp make_pair
using namespace std;
struct ikun{
long long ed,next;
long long v;
}a[100050];
long long n,m,hp,g;
long long p[10010],nbs[10010];
void add(long long x,long long y,long long z){
g++;
a[g]=(ikun){y,nbs[x],z};
nbs[x]=g;
}
bool dijk(long long x){
if(x<p[1])return 0;
long long d[10010]={};
bool v[10010]={};
for(int i=1;i<=n;i++){
d[i]=inf;
v[i]=0;
}
d[1]=0;
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>h;
h.push(mp(0,1));
while(!h.empty()){
long long k=h.top().second;
h.pop();
if(v[k])continue;
v[k]=1;
long long l=nbs[k];
while(l){
long long to=a[l].ed;
if(p[to]>x)continue;
if(d[to]>d[k]+a[l].v){
d[to]=d[k]+a[l].v;
h.push(mp(d[to],to));
}
l=a[l].next;
}
}
return d[n]<=hp;
}
int main(){
freopen("1.in","r",stdin);
long long l,r=-1;
cin>>n>>m>>hp;
cout<<n<<m<<hp<<endl;
for(int i=1;i<=n;i++){
cin>>p[i];
r=max(p[i],r);
}
l=max(p[1],p[n]);
for(int i=1;i<=m;i++){
long long x,y,t;
cin>>x>>y>>t;
add(x,y,t);
add(y,x,t);
}
if(!dijk(r)){
cout<<"AFK";
return 0;
}
long long ans;
while(l<=r){
long long mid=(l+r)/2;
if(dijk(mid)){
ans=mid;
r=mid-1;
}else l=mid+1;
}
cout<<ans;
return 0;
}
1.in是一个超级大(真的很大)的样例
当把cout<<n<<m<<hp<<endl;去掉的时候不会输出“AFK”,反之会,这是为啥?