看不懂题解存最短路经过的+边的操作,求大佬解释

P2176 [USACO11DEC] RoadBlock S / [USACO14FEB]Roadblock G/S

~~O2优化~~
by Absurdity @ 2019-11-11 16:39:06


在松弛的时候存储 pre[to] = i 用终点来记录边
by twilight_moon @ 2019-11-11 16:41:21


@[Mysterious_wind](/user/122953) ~~O2过了~~
by kakao @ 2019-11-11 16:51:22


@[twilight_moon](/user/135866) 是专门开一个数组来存吗?
by kakao @ 2019-11-11 16:51:52


@[麒然](/user/105266) 不是吧,他的意思也许是不存边的起点,也就是不用head[],用pre[]存终点。
by Absurdity @ 2019-11-11 16:57:14


@[Mysterious_wind](/user/122953) 还是不理解,用终点存边和记录最短路经过哪些边有什么关系吗?
by kakao @ 2019-11-11 17:06:55


@[麒然](/user/105266) 我也觉得用终点存没有什么优化,~~所以既然这一题SPFA常数不大,那就跑SPFA吧~~
by Absurdity @ 2019-11-11 17:11:44


@[麒然](/user/105266) 是的鸭 或者你可以正着跑一遍dijk 反着跑一遍 只要满足 dis[i] + tu[j].val + disf[tu[j].to] == yuan || dis[tu[j].to] + tu[j].val + disf[i] == 最短路长度 就可以证明他是最短路上的边
by twilight_moon @ 2019-11-11 17:46:38


@[麒然](/user/105266) 你可以跑2遍dij(正的和反的)然后判断一条边是否为最短路上的边,然后枚举这些边就好
by 取啥名好 @ 2019-11-11 17:46:52


@[取啥名好](/user/173397) 这个人是 憨憨
by twilight_moon @ 2019-11-11 17:47:40


|