全WA求助

P1948 [USACO08JAN] Telephone Lines S

现在是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


|