首页 > 其他分享 >P5905 【模板】Johnson 全源最短路

P5905 【模板】Johnson 全源最短路

时间:2022-12-13 11:23:19浏览次数:95  
标签:node Johnson P5905 全源 value edge inqueue qcnt

P5905 【模板】Johnson 全源最短路
...

处理负权边的方法十分巧妙,就像是势能一样

算法上文链接有详解,就不赘述了,这样就实现了dij也可以处理负边

是需要提前预处理一遍,建立超级源点用bellman-ford跑一遍就行

然后是第一个问题,总是TLE

然后发现自己dij的板子都打得有问题/kk

if(vis[tmp])continue;

一定要把放在前面判断,因为dij是按dis排序的,所以先遍历到一定dis更短

这个可以快不少

第二个问题是对于负权边的判断

我感觉这点还蛮重要的

对于松弛的计数并不是按照更新数来算的

而是对于是否更新且是否在队列中来算的

Old:

if (h[to] > h[node] + edge[i].value)
{
    h[to] = h[node] + edge[i].value;
    qcnt[to]++;
    if (qcnt[to] > n)
        return false;
    if (!inqueue[to])
        q.push(to), inqueue[to] = true;
}

New:

if (h[to] > h[node] + edge[i].value)
{
    h[to] = h[node] + edge[i].value;
    if (!inqueue[to])
    {
        q.push(to), inqueue[to] = true;
        qcnt[to]++;
        if (qcnt[to] > n)
            return false;
    }
}

这不是我的代码(我写的比较乱)

这其中蕴含的问题是一样的

hack数据

2 3
2 1 -3
2 1 -2
2 1 -1

由于重边的存在,所以只能用后者的写法

搞了一下午,菜死了/kk

标签:node,Johnson,P5905,全源,value,edge,inqueue,qcnt
From: https://www.cnblogs.com/fleabag/p/16978070.html

相关文章

  • Johnson全源最短路
    Johnson全源最短路:n个点m条边Johnson全源最短路算法主要解决负环问题的全源最短路径算法主要思路:1.SPFA判断负环,在跑SPFA之前建立一个[超级源点]标号为0与每一个点之......
  • Johnson全源最短路
    Johnson通过另一种方法给每条边重新标注边权。新建一个虚拟结点0,向其他所有点连一条边权为0的边,用Bellman-Ford或SPFA算法求出0到其他所有点的最短路记为gpe[i],对于一条x->......
  • 【lwip】09-IPv4协议&超全源码实现分析
    目录前言9.1IP协议简述9.2IP地址分类9.2.1私有地址9.2.2受限广播地址9.2.3直接广播地址9.2.4多播地址9.2.5环回地址9.2.6本地链路地址9.2.7本网络本主机地址9.2.8......
  • 全源最短路
    全源最短路给定一个有向图或无向图,求任意两点之间的最短路径。Floyd算法1.算法思想:Floyd算法的本质是动态规划,所以只要找到动态转移方程,就可以按照转移方程很简单地写出......