迪杰斯特拉优化版本:vector + 优先队列 △迪杰斯特拉算法的核心:每次找距离s点最短的元素 + 松弛操作 ①要用优先队列取出最短距离降低时间复杂度,用veotor减少空间 ②定义一个pair类型,作为优先队列的元素。typedef pair<int , int > P ,first是距离,se ...
分类:
编程语言 时间:
2020-01-11 20:46:40
阅读次数:
121
优先队列 priority_queue:按照优先级排序,优先级高的排在队首,用堆(heap)、二叉堆 实现 ①头文件:#include <queue> ②用法:priority_queue <type, contiainer, functional> type: 数据类型 container:容器类 ...
分类:
其他好文 时间:
2020-01-11 15:23:18
阅读次数:
88
题解:vector + 优先队列 -> 迪杰斯特拉算法 不必求任何两点的距离,只求行星据点到其余每个点的距离即可 把count个行星据点到其余每个点的距离存入二维数组 每一列就是对应顶点i到每个行星据点的最短距离,取出放入一维数组sort,然后取前k个即可,如果遇到INF则跳过不取 //迪杰斯特拉算 ...
分类:
其他好文 时间:
2020-01-11 14:52:50
阅读次数:
75
2020-01-10 17:51:05 问题描述: 问题求解: 本题是经典的sweep line问题。 对于sweep line问题我们需要考虑的只有两点: 1. 延水平方向 / 时间方向 :时间队列 event queue,一般来说是一个优先队列; 2. 延垂直方向 :sweep line sta ...
分类:
其他好文 时间:
2020-01-10 18:28:36
阅读次数:
108
Luogu P1631 序列合并 首先看下题目, 要求的是两个长度都是$N$的序列$A$和$B$,在$A$和$B$中各取一个数相加可以得到$N^2$个和,这$N^2$个和中最小的$N$个。 看到由小到大输出,想出这有由优先队列和枚举解决的可能性,开始尝试 最简单的方式就是把每一个和都暴力塞进去,但是 ...
分类:
其他好文 时间:
2020-01-07 01:05:50
阅读次数:
62
1、优先队列 每次取出的元素是队列中优先级(自定义)最高的 常用场景:按一定的规则顺序筛选数据 本质结构:二叉堆(可利用数组结构来实现完全二叉树) 特性: 第一个元素array[0]优先级最高 下表i,对于元素array[i]: 父节点,下标为 (i-1)/2 左孩子,2*i+1 右孩子,2*i+2 ...
分类:
其他好文 时间:
2020-01-07 00:52:01
阅读次数:
113
"题目" 一句话题意 , 有 k 个长为 k 的序列 , 从其中每个序列选一个数 $k^k$ 个和中输出前k小 考虑 有两个长为n的序列 , 从他们中选出$n$最小的和 , 可以用一个很妙的想法 在优先队列里 , 存$(a_1 + b_1 , 1) , (a_2 + b_1 , 1) , (a_3 ...
分类:
其他好文 时间:
2020-01-06 09:53:58
阅读次数:
55
主要bb一下优先队列和字符串吧. 哦还有 bitset.优先队列定义很容易: priority_queue pq;内部是一个堆.基本操作pq.top() 取堆顶元素; (没有 front() 方法!)pq.push(x) 插入;pq.pop() 删除(删除堆顶);pq.empty() 判断是否为空.... ...
分类:
编程语言 时间:
2020-01-04 01:21:05
阅读次数:
88
序言 二叉堆本质上是一种完全二叉树, 它分为两个类型。 1. 最大堆 2. 最小堆 最大堆 什么是最大堆呢? 最大堆的任何一个父节点的值, 都大于或等于它左、 右孩子节点的值。 最小堆 什么是最小堆呢? 最小堆的任何一个父节点的值, 都小于或等于它左、 右孩子节点的值。 二叉堆的根节点叫作堆顶。最大 ...
分类:
其他好文 时间:
2020-01-03 00:39:23
阅读次数:
76
优先队列:出队顺序和入队顺序无关,而是和优先级有关(优先级高的先出队) 如果使用普通线性结构或者顺序线性结构实现优先队列,出队或者入队总有一方是O(n)级别的;如果使用堆实现优先队列,能使入队和出队的时间复杂度都是O(logn),效率是极高的。 二叉堆是一颗完全二叉树,不一定是满二叉树,但是确实节点 ...
分类:
其他好文 时间:
2019-12-29 10:59:11
阅读次数:
94