spfa卡住动不了求助

P3371 【模板】单源最短路径(弱化版)

@[CONILLION](/space/show?uid=43796) SPFA是队列啊 , 您这是栈啊
by Hono @ 2018-07-19 11:47:59


@[spfa](/space/show?uid=17850)
by qianfujia @ 2018-07-19 12:07:46


@[保登心爱](/space/show?uid=27115) 是手写队列没错啊
by 八声甘州 @ 2018-07-19 14:14:59


@[保登心爱](/space/show?uid=27115) 哦对对对对谢谢谢谢
by 八声甘州 @ 2018-07-19 14:16:13


```cpp #include<iostream> #include<cstdio> using namespace std; struct Edge{ long long n,t,w; }edge[200001]; long long n,m,s,i,j,f,t,w,cnt,k,r,l; long long que[15001],d[5001],head[5001],visit[5001]; int main() { //freopen("spfa.in","r",stdin); //freopen("spfa.out","w",stdout); scanf("%d%d%d",&n,&m,&s); for (i=0;i<=n;i++) { head[i]=-1; d[i]=2147483647; } for (i=1;i<=m;i++) { scanf("%d%d%d",&f,&t,&w); edge[i].t=t; edge[i].w=w; edge[i].n=head[f]; head[f]=i; //printf("%d\n",edge[i].w); } que[1]=s;l=0;r=1;d[s]=0; while (l<=r) { cnt=que[++l]; //printf("%d %d\n",l,cnt); visit[cnt]=false; k=head[cnt]; while (k!=-1) { if (edge[k].w+d[cnt]<d[edge[k].t]) { d[edge[k].t]=edge[k].w+d[cnt]; //printf("%d %d",edge[k].t,edge[k].w); if (!visit[edge[k].t]) { r++; que[r]=edge[k].t; visit[edge[k].t]=true; //printf("%d ",que[r]); } //printf("%d ",k); } k=edge[k].n; } //printf("%d ",r); } for (i=1;i<=n;i++) printf("%d ",d[i]); return 0; } ```
by 八声甘州 @ 2018-07-19 14:44:18


RE70…………
by 八声甘州 @ 2018-07-19 14:44:48


过了过了
by 八声甘州 @ 2018-07-19 14:58:16


|