【初赛】堆

可分为两种:大根堆(最大堆)、小根堆(最小堆)。

大根堆

何为大根堆?顾名思义,大根堆即指在逻辑上的二叉树结构中,根结点>子结点,总是最大的,并且在堆的每一个局部都是如此。大根堆的根结点在整个堆中是最大的元素。
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 将导致最小元素显示为 top()。所以小根堆
priority_queue<int,vector<int>,greater<int> >q;

dij使用堆时,若为小根堆,则 push 时需 q.push({dis[v],v});

部分from

posted @ 2025-09-19 11:41  Slayer-WT!!!!!!!!  阅读(23)  评论(0)    收藏  举报