关于Dijkstra选择大根堆取负还是小根堆的影响
查看原帖
关于Dijkstra选择大根堆取负还是小根堆的影响
38041
RagnaLP楼主2022/1/20 00:36

我这个题Dijkstra的思路是用set维护以最小花费到达某个点的所有公司,最短路的过程就是如果这个边所属公司是这个边起点的set中的元素,那么这条边的花费为0,否则为1;如果能够更新边的终点的最小花费,那么将终点的set清空并加入这条边所属公司;如果与边的终点的最小花费相等,那么将边的终点的加入这条边所属公司(就是不清空)

按照以上思路,如果堆里放的是pair<int,int>,在使用小根堆跑Dijkstra时就会WA(测评和代码在这里),但是如果换成大根堆并在入队时取负就能过(测评和代码在这里

有点诡异,我觉得按照理论上这两种实现的效果是一样的,所以想问一下各位佬对于这两个的区别有没有什么见解 orz

2022/1/20 00:36
加载中...