关于 Dijkstra 与负权图
  • 板块灌水区
  • 楼主adpitacor
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/7/11 23:15
  • 上次更新2023/11/4 15:03:26
查看原帖
关于 Dijkstra 与负权图
374733
adpitacor楼主2021/7/11 23:15

rt ,我有一个不太成熟的想法:

对于负权图,遍历每条边,求出最小负边权(记为 vv ),然后将所有边权都加上 v|v| ,将所有负边权都补为非负边权,然后就可以愉快地用Dijkstra了。

当然,这样求出来的最短路会长很多。去掉的方法:做 Dijkstra 时,记录源点到每个点经过的边数(记为 totegtoteg ),则可如下进行转移:

//x:本次最短路的目标点
for(int i=head[i];i;i=edge[i].next){
    int &y=edge[i].to,&z=edge[i].val;
    if(dist[x]+z<dist[y]){
        dist[y]=dist[x]+z;
        toteg[y]=toteg[x]+1;
    }
}

做完 Dijkstra 之后,记要求最短路的目标点为 ee ,则 dist[e]toteg[e]vdist\,[e\,] - toteg\,[e\,] * |v| 为所求。

至于为什么要这么做嘛……

关于 SPFA ,它死了。

2021/7/11 23:15
加载中...