题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1975题意:给出一个带权有向图。求一个最大的K使得前K短路的长度之和不大于给定的值Sum。思路:首先,求出每个点到n的最短路。接着,使用优先队列,节点为(D,u)。首先将(dis[1],1)...
分类:
其他好文 时间:
2014-06-23 06:43:52
阅读次数:
188
命题Q。对于一个含有N个元素的基于堆叠优先队列,插入元素操作只需要不超过(lgN + 1)次比较,删除最大元素的操作需要不超过2lgN次比较。证明。由命题P可知,两种操作都需要在根节点和堆底之间移动元素,而路径的长度不超过lgN。对于路径上的每个节点,删除最大元素需要两次比比较(除了堆底元素),一次...
分类:
其他好文 时间:
2014-06-22 23:50:00
阅读次数:
510
接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。n=0;for(i=1;i=1;i--) siftd...
分类:
其他好文 时间:
2014-06-20 20:41:11
阅读次数:
205
堆是什么?是一种特殊的完全二叉树,就像下面这棵树一样。 有没有发现这棵二叉树有一个特点,就是所有父结点都比子结点要小(注意:圆圈里面的数是值,圆圈上面的数是这个结点的编号,此规定仅适用于本节)。 符合这样特点的完全二叉树我们称为最小堆。反之,如果所有父结点都比子结点要大,这样的完全二叉树称为...
分类:
其他好文 时间:
2014-06-20 19:57:49
阅读次数:
215
题意: 有一个k*k 的方阵,让你从当中每一行挑选一个数字相加最后能得到K^K次方的和,输出其中最小的k个。思路:先对每一行排序然后两两归并,每次取前k个再和下一行再进行归并。在归并的时候用一个优先队列维护最大的k个值每次先放k个进去然后一次每行和队顶比较,若是小则替换否则break最后输出即可。代...
分类:
其他好文 时间:
2014-06-18 17:46:28
阅读次数:
142
最近做题目饱受打击,愈发觉得打好基础的重要性,于是乎,决心把基本的排序算法还有数组操作一一实现,目的在于一方面能够得到对JAVA基础的巩固,另一面在实现的过程中发现不足。 今天所实现的堆排序(最大堆)算法,最小堆大同小异。然后基于最大堆实现最大优先队列,最大优先队列可应用于作业调度,比如可将作...
分类:
编程语言 时间:
2014-06-18 09:52:16
阅读次数:
327
接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log i),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。n=0;for(i=1;i=1;i--) siftd...
分类:
其他好文 时间:
2014-06-17 20:36:51
阅读次数:
298
接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(logi),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。n=0;
for(i=1;i<=m;i++)
{
n++;
h[n]=a[i..
分类:
其他好文 时间:
2014-06-17 17:54:05
阅读次数:
177
接着上一Pa说。就是如何建立这个堆呢。可以从空的堆开始,然后依次往堆中插入每一个元素,直到所有数都被插入(转移到堆中为止)。因为插入第i个元素的所用的时间是O(log
i),所以插入所有元素的整体时间复杂度是O(NlogN),代码如下。
n=0;
for(i=1;i)
{
n++;
h[ n]=a[ i]; //或者写成scanf("%d",&h[ n]);
...
分类:
其他好文 时间:
2014-06-17 16:20:33
阅读次数:
322
给定一个非负整数序列{dn},若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化。进一步,若图为简单图,则称此序列可简单图化。此题因为是无自环无重边,所以是简单图。用判定简单图可图化的Havel-Hakimi定理。Havel-Hakimi定理:一个度序列:是简单图度序列当且仅当:是简...
分类:
其他好文 时间:
2014-06-15 11:54:25
阅读次数:
221