【初赛】堆
堆
可分为两种:大根堆(最大堆)、小根堆(最小堆)。
大根堆
何为大根堆?顾名思义,大根堆即指在逻辑上的二叉树结构中,根结点>子结点,总是最大的,并且在堆的每一个局部都是如此。大根堆的根结点在整个堆中是最大的元素。
priority_queue<int>q;
dij使用堆时,若为大根堆,则 push 时需 q.push({-dis[v],v});
小根堆
小根堆的性质与大根堆类似,只不过在二叉树的结构中,根结点<子结点。例如 1 , 2 , 3 {1,2,3}1,2,3 为小根堆,1 , 3 , 2 {1,3,2}1,3,2 同样也是小根堆。小根堆的根结点在整个堆中是最小的元素。
使用 std::greater
priority_queue<int,vector<int>,greater<int> >q;
dij使用堆时,若为小根堆,则 push 时需 q.push({dis[v],v});

浙公网安备 33010602011771号