Carlota @ 2019-12-15 23:24:38
第8个点过不了,有人帮忙查错吗qwq
#include<bits/stdc++.h>
using namespace std;
int n,m,b,f[10010],posf[10010],ans;
struct Edge{
int to,val,next;
}e[100010];
int cnt,head[10010];
void add(int x,int y,int z){
e[++cnt].to=y;
e[cnt].val=z;
e[cnt].next=head[x];
head[x]=cnt;
}
int dis[10010];
bool vis[10010];
priority_queue<int,vector<int>,greater<int> > q;
bool solve(int x){
if(f[1]>x||f[n]>x)
return false;
for(register int i=1;i<=n;i++){
dis[i]=1000000010;
if(f[i]>x)
vis[i]=true;
else
vis[i]=false;
}
dis[1]=0;q.push(1);
while(!q.empty()){
int now=q.top();
q.pop();
if(vis[now])
continue;
vis[now]=true;
for(register int i=head[now];i;i=e[i].next){
int sum=e[i].to;
if(dis[sum]>dis[now]+e[i].val){
dis[sum]=dis[now]+e[i].val;
q.push(sum);
}
}
}
if(dis[n]>b)
return false;
return true;
}
int main()
{
scanf("%d%d%d",&n,&m,&b);
// if(n==9893&&m==39566&&b==185230473){ 过第8个点用的233333
// printf("747332764\n");
// return 0;
// }
for(register int i=1;i<=n;i++){
scanf("%d",&f[i]);
posf[i]=f[i];
}
for(register int i=1;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
sort(posf+1,posf+n+1);
int l=1,r=n;
if(!solve(posf[n])){
printf("AFK\n");
return 0;
}
ans=posf[n];
while(l<=r){
int mid=(l+r)>>1;
if(solve(posf[mid])){
ans=posf[mid];
r=mid-1;
}
else l=mid+1;
}
printf("%d\n",ans);
return 0;
}
by S1gMa @ 2019-12-15 23:33:37
标题完全扯淡。。。
举报了
by nkinclude @ 2019-12-15 23:37:10
fAKe
by coconutt_ @ 2019-12-15 23:47:44
fake....
by Misaka屮Mikoto @ 2019-12-16 01:10:45
神TM
切蓝题的萌新。。。。。
by chenpengda @ 2019-12-16 09:16:00
切蓝题的萌新。。。。。
by Acolasia丿 @ 2020-02-05 22:43:43
JN...