【悬关】为什么 Dijkstra 不对

P1948 [USACO08JAN] Telephone Lines S

是tle还是wa
by Let_Fly @ 2023-08-23 14:26:46


@[Let_Fly](/user/760859) WA
by ForMyDream @ 2023-08-23 14:27:45


@[ForMyDream](/user/502758) > rt,用双端队列广搜能 AC,用 Dijkstra 就不行,求解答,谢谢。#include<iostream>#include<cstring>#include<queue>#include<dequ…… 分层图没搞对吧
by wwwidk1234 @ 2023-08-23 14:29:46


@[ForMyDream](/user/502758) > rt,用双端队列广搜能 AC,用 Dijkstra 就不行,求解答,谢谢。#include<iostream>#include<cstring>#include<queue>#include<dequ…… ```cpp signed main() { n=read(); m=read(); k=read(); int s=1,t=n; for(int i=0;i<m;i++) { int u=read(),v=read(),w=read(); addEdge(u,v,w); addEdge(v,u,w); //写分层图 for(int j=1;j<=k;j++) { //其余k层同层连边 addEdge(u+j*n,v+j*n,w); addEdge(v+j*n,u+j*n,w); //相邻两层连边 addEdge(u+(j-1)*n,v+j*n,0); addEdge(v+(j-1)*n,u+j*n,0); } } //连层与层的终点 for(int i=1;i<=k;i++) addEdge(t+(i-1)*n,t+i*n,0); memset(distanc,0x3f,sizeof distanc); dijkstra(s); // for(int i=1;i<=t+k*n;i++) cout<<i<<':'<<distanc[i]<<","; if(distanc[t+n*k]==0x3f3f3f3f) cout<<"-1"; else cout<<distanc[t+n*k]; // cout<<(distanc[t+n*k]==0x3f3f3f3f)?(-1):(distanc[t+n*k]); return 0; } ```
by wwwidk1234 @ 2023-08-23 14:30:38


@[wwwidk1234](/user/728483) 用 Dij 一定要用分层图吗,这里我想二分直接替换分层图
by ForMyDream @ 2023-08-23 14:31:05


@[ForMyDream](/user/502758) > @[wwwidk1234](/user/728483) 用 Dij 一定要用分层图吗,这里我想二分直接替换分层图 我建议是写分层图,这样子就可以直接套模板了,毕竟多连几条边也不是什么难得问题,考虑一下这个: - 先连普通边 - 其余 $k$ 层同层连边 - 相邻两层连边 具体可以参考我的代码
by wwwidk1234 @ 2023-08-23 14:33:05


你优先队列排序如果用pair要传负数
by Let_Fly @ 2023-08-23 14:33:43


@[Let_Fly](/user/760859) 他已经用 greater 了
by Argvchs @ 2023-08-23 14:36:29


@[Argvchs](/user/533270) 不是注释掉了吗
by Let_Fly @ 2023-08-23 14:40:39


@[Let_Fly](/user/760859) 啊看错了
by Argvchs @ 2023-08-23 14:41:18


| 下一页