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