现在是90pts求助
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1001;
int n,p,k;
int cnt,h[N],vis[N],dis[N];
int q[100*N];
struct Kano{
int to,ne,v;
}a[20*N];
void add(int x,int y,int z)
{
++cnt,a[cnt].to=y,a[cnt].v=z,a[cnt].ne=h[x],h[x]=cnt;
}
void spfa(int t)
{
int x,va,to;
memset(dis,0x7f7f,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[1]=0,vis[1]=true,q[1]=1;
int l=0,r=1;
while(l<r)
{
x=q[++l],vis[x]=false;
for(int i=h[x];i!=0;i=a[i].ne)
{
to=a[i].to,va=(a[i].v>t);
if(dis[to]>dis[x]+va)
{
dis[to]=dis[x]+va;
if(!vis[to])vis[to]=true,q[++r]=to;
}
}
}
}
int main()
{
int maxx=INT_MIN;
scanf("%d%d%d",&n,&p,&k);
int x,y,z;
for(int i=1;i<=p;i++)scanf("%d%d%d",&x,&y,&z),add(x,y,z),add(y,x,z),maxx=max(maxx,z);
int l=0,r=maxx,mid;
spfa(0);
if(dis[n]==0x7f7f){printf("-1\n");return 0;}
if(dis[n]<=k){printf("0\n");return 0;}
while(l<r)
{
mid=(l+r)>>1;
spfa(mid);
if(dis[n]<=k)r=mid;
else l=mid+1;
}
printf("%d\n",l);
return 0;
}
```
by Kano_zyc @ 2023-12-07 19:01:45
把二分的范围改成l=0,r=1e6+1
然后在输出l前判断一下如果l等于1e6+1
就输出-1
by Rudy1124 @ 2023-12-31 00:07:23
@[Kano_zyc](/user/1076440) 你的代码对到不了的情况判断不够完全
by Rudy1124 @ 2023-12-31 00:08:21
@[Rudy1124](/user/681599) 谢谢!
by Kano_zyc @ 2023-12-31 09:16:24