数据结构
文章平均质量分 80
LiWen_7
这个作者很懒,什么都没留下…
展开
-
STlL系列之一 deque双向队列
deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面列出deque的常用成员函数:deque的实现比较复杂,内部会维护一个map(注意!不是STL中的map容器)即一小块连续的空间,该空间中每个元素都是指针,指向另一段(较大的)区域,这个区域称为缓冲区,缓冲区用来保存deque中的数据。因转载 2012-02-25 16:28:52 · 732 阅读 · 0 评论 -
STL系列之二stack栈
栈(statck)这种数据结构在计算机中是相当出名的。栈中的数据是先进后出的(First In Last Out, FILO)。栈只有一个出口,允许新增元素(只能在栈顶上增加)、移出元素(只能移出栈顶元素)、取得栈顶元素等操作。在STL中,栈是以别的容器作为底部结构,再将接口改变,使之符合栈的特性就可以了。因此实现非常的方便。下面就给出栈的函数列表和VS2008中栈的源代码,在STL中栈一共就5个转载 2012-02-25 16:30:44 · 522 阅读 · 0 评论 -
hud 1022 栈的应用
#include#includeusing namespace std;int main(){ int n; char stra[1010],strb[1010]; stack s; int a,b,t; int way[1010]; while (scanf("%d%s%s",&n,stra,strb)!=EOF) {原创 2012-04-21 14:30:47 · 617 阅读 · 0 评论 -
hdu 2822 Dogs 优先队列
起点到终点,’X‘处不用时,’ . '用时为1,求到达终点的最小时间。因为当前状态的下一个状态不能确定,所以如果用普通广搜的话,必须将整个图遍历一遍,但是此题的n*m可能为1000*1000,必定超时。所以考虑用优先队列。即,每次探查到的点入队列时,不是直接放到队尾,放在队列中合适的位置(此元素前面的元素比它“小”,后面的元素比它“大”),这样才能保证,首先探查到终点的路径为所需“最短”路径。原创 2012-04-21 15:56:49 · 774 阅读 · 0 评论 -
树的分治 poj 1741
求树的重心结点:用标号定义树的重心,对于一个结点K,如果把K从树中删除(连同与它相连的边一起),剩下的被分成了很多块,每一块显然又是一棵树(即剩下的部份构成了一个森林)。则给结点K所标的号就是森林中结点个数最多的树所拥有的结点数。如果结点K的标号不大于其它他任何一个结点的标号,则结点K被称为是树的重心。从树种找到重心,在以每个重心分为的森林找每棵树的重心,每找到一个重心,就原创 2012-07-09 16:29:38 · 1271 阅读 · 0 评论 -
单调队列
POJ 2823:也就是有一个数列a,要求你求数列b和c,b[i]是a[i]…a[i+w-1]中的最小值,c[i]是最大值。如果a是1,3,-1,-3,5,3,6,7,则b为-1,-3,-3,-3,3,3,c为3,3,5,5,6,7。这个问题相当于一个数据流(数列a)在不断地到来,而数据是不断过期的,相当于我们只能保存有限的数据(sliding window中的数据,此题中就是窗口的宽度原创 2012-07-23 17:08:27 · 581 阅读 · 0 评论 -
hdu 2191 单调队列优化
F[i][j] = max { F[i - 1] [j – k * v[i] ] + k * w[i] } (0 假设 v[i]为容量 w[i]为价值 no[i]为数量a = j / v[i] 即a为i种物品最大可能使用次数。 b = j % v[i] 即不能用i种物品表达的价值。则朴素转移公式可化为: F[i][j] = max { F[a*v[i] + b - k*v[原创 2012-07-24 17:05:20 · 853 阅读 · 0 评论