用优先队列实现本题是否存在问题
查看原帖
用优先队列实现本题是否存在问题
482728
Engulf楼主2024/8/2 08:27

思路就是题解里提到的那样,但是实现的时候,是把所有节点直接丢进优先队列里,合并 uu 和 pup_u 后,按理来说应该删除原来的 pup_u(信息变了),优先队列做不到这个,这应该会有问题的吧?因为 pup_u 有两个甚至多个点在堆里,但合并的时候已经修改了 pup_u 的 c1c0\dfrac{c_1}{c_0},所以这时候的 pup_u 的值已经修改,不一定是它插入堆中用于比较的那个权值了,题解实现一般的都是记录一个 del[u],如果 uu 与 pup_u 合并了那么 del[u] = 1,如果堆顶 del 为 1 跳过。

这里用 set 实现是很符合直觉的,但是优先队列我是没想明白

2024/8/2 08:27
加载中...