风笛 @ 2018-10-10 21:40:29
#include <cstdio>
#include <queue>
#include <algorithm>
#define res register int
typedef long long ll;
const int mx = 12550;
ll n,m,tot,life,l,r,head[mx],d[mx],p[mx];
bool vis[mx];
std::queue<int> q;
struct edge{
int to,next,w;
}e[mx<<2];
inline ll max(ll a,ll b){
return a > b ? a : b;
}
inline ll rd(){
ll x=0,f=1;char c=getchar();
while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
while(c<='9'&&c>='0') { x=(x<<3)+(x<<1)+c-'0';c=getchar();}
return x*f;
}
inline void write(ll x){
if(x<0) { putchar('-');x=-x;}
if(x>9) write(x/10);
putchar(x%10+'0');
}
inline void add(int x,int y,int z){
e[++tot].to=y;
e[tot].w=z;
e[tot].next=head[x];
head[x]=tot;
}
inline void init(){
n=rd(),m=rd(),life=rd();
for(res i=1;i<=n;i++){
p[i]=rd();
r=max(p[i],r);
} l=max(p[1],p[n]);
for(res i=1,x,y,z;i<=m;i++){
x=rd(),y=rd(),z=rd();
if(x==y) continue;
add(x,y,z);
add(y,x,z);
}
}
inline bool spfa(int x){
if(p[1]>x||p[n]>x) return false;
for(res i=1;i<=n;i++) d[i] = 2147483647;
d[1]=0;q.push(1);
while(!q.empty()){
int u=q.front();vis[u]=0;q.pop();
for(res i=head[u];i;i=e[i].next){
int to=e[i].to;
if(d[to]>d[u]+e[i].w&&p[to]<=x){
d[to]=d[u]+e[i].w;
if(!vis[to]){
vis[to]=1;
q.push(to);
}
}
}
}
if(d[n]>life) return false;
return true;
}
inline void deal(){
while(l<r){
int mid = (l+r)>>1;
if(spfa(mid)) r=mid;
l=mid+1;
}
}
int main(){
// freopen("std.in","r",stdin);
init();
deal();
if(spfa(l)) write(l);
else printf("AFK");
return 0;
}
by HikariForever @ 2018-10-10 21:43:21
您要是刚学OI那我就是刚学算法之四则运算了
by Rbu_nas @ 2018-10-10 21:47:24
蕾姆赛高
by 硫酸钒酰 @ 2018-10-10 21:48:49
@水袖莲蝶
那我大概刚上小学
by whiteqwq @ 2018-10-10 21:52:54
刚学OI都是怪物系列。
by 一叶知秋。 @ 2018-10-10 21:54:04
那我只是刚学OI之LCA
by Ikari_Shinji @ 2018-10-10 22:00:39
那我只是幼儿园
by Sammuel @ 2018-10-10 22:01:21
@水袖莲蝶 您老用这么多数组干嘛 找的好烦哦~~~
by 风笛 @ 2018-10-10 22:39:11
@Sammuel 我就开了五个数组,您说的是不是子函数啊qwq
by MZ_CXQ @ 2018-10-12 08:22:50
刚学oi的红名大佬
by Sammuel @ 2018-10-12 21:55:17
@水袖莲蝶 打错了QWQ