基础数据结构
文章平均质量分 51
Mollnn
这个作者很懒,什么都没留下…
展开
-
POJ-数据结构与算法-线性表 多项式加法
一开始把这一道题想得太简单了,直接用一个50W的数组结果RE.提交人班级结果内存时间代码长度语言提交时间mollnn Accepted664kB17ms834 BG++3分钟前mollnn Runti原创 2016-08-06 15:00:57 · 695 阅读 · 0 评论 -
[Tyvj1728] 普通平衡树 - Splay模板
第三次A这题了,代码终于像点样子。#include<cstdio>#define Ms 100005using namespace std;int fa[Ms],ch[Ms][2],cnt[Ms],size[Ms],k[Ms],ind=0,root=0,m;void debug(int p);void update(int p){ size[p]=size[ch[p][0]]+si原创 2017-08-19 23:07:13 · 309 阅读 · 0 评论 -
Splay模板
第二代Splay魔板。#include <cstdio>#include <cstring>#include <iostream>using namespace std;int fa[100005],ch[100005][2],cnt[100005],size[100005],k[100005],m,ind=0,root=0;void update(int p){ size[0]=原创 2017-08-18 22:15:37 · 454 阅读 · 0 评论 -
数据结构Note:伸展树(Splay Tree)
基本思想: 每个节点被访问时,使用旋转操作将其移动到根。 旋转是自底向上的,因此需要设置父亲指针核心操作:伸展Splay(x)保持伸展树有序性的前提下,将元素x调整到树的根部单次双旋,分若干种情况讨论!p->father x==y->left Zig(x)x==y->right Zag(x)p->father (令p=x->father)x==p->left p==p->father-原创 2017-06-06 20:05:51 · 422 阅读 · 0 评论 -
Dijkstra最短路径算法的优化
在传统的Dijkstra算法中,我们不难发现,大量的时间被用于遍历d[]数组。 因此,我们可以通过一个小顶堆来替代这个遍历过程。优化后的算法复杂度为O(v*lgn)。#include <cstdio>#include <cstring>#include <queue>using namespace std;#define MAXN 10005#define MAXM 500005#de原创 2016-10-06 13:31:56 · 1262 阅读 · 0 评论 -
数据结构:从堆到“漏斗”
问题引入:黑匣子Black Box是一种原始的数据库。它可以储存一个整数数组,还有一个特别的变量i。最开始的时候Black Box是空的.而i等于0。这个Black Box要处理一串命令。 命令只有两种: ADD(x):把x元素放进BlackBox; GET:i加1,然后输出Blackhox中第i小的数。 记住:第i小的数,就是Black Box里的数的按从小到大的顺序排序后的第i个元素。原创 2016-10-02 22:14:24 · 481 阅读 · 0 评论 -
最小生成树Prim与Kruskal算法的比较
最小生成树是图论问题中很基本的一个操作。常用的算法有Prim和Kruskal两种算法。本文对这两种算法稍作区别与讨论。Prim算法是依赖于点的算法。它的基本原理是从当前点寻找一个离自己(集合)最近的点然后把这个点拉到自己家来(距离设为0),同时输出一条边,并且刷新到其他点的路径长度。俗称,刷表。 根据Prim算法的特性可以得知,它很适合于点密集的图。通常在教材中,对Prim算法进行介绍的标程都采用原创 2016-09-19 21:48:50 · 14660 阅读 · 1 评论 -
搜索与数据结构
最简单的搜索当然分为两种,深度优先搜索和广度优先搜索。这两种算法分别采用了栈和队列的数据结构来实现。对于深搜,优化方法通常是各种剪枝,主要包括最优化剪枝和可行性剪枝。对于广搜,优化方式通常是进行重复去除和优先搜索。通常都说能用深搜不用广搜,其实在一定条件下确实有道理。在很多情况下,深度优先搜索通常比广度优先搜索写起来简单、方便。同时,采用简单的递归方法来描述深度优先搜索,可以避开对数据结构原创 2016-08-24 12:39:30 · 726 阅读 · 0 评论 -
C++STL中String类的分析与运用
[Mollnn.Fan原创,转载请注明出处] 本来以为有了String类,所有的字符串操作都变得非常简单。然后,在某次实际测试中反应出了很大的问题。原本只涉及到区区一个replace,在有参考资料的状态下10分钟轻松解决的问题,只因为忘记了replace函数的原型,导致了问题的复杂化。说实话,对于MFC的CString我或许更加熟悉,但应付竞赛需要,现在开始改掉用MFC的习惯。 在那道替换问题中原创 2016-09-06 12:55:44 · 467 阅读 · 0 评论 -
并查集初阶:畅通工程问题
畅通工程问题是一个很经典的并查集问题。不是说这一题不可以用图论来解决,而是这题用并查集的思想省时省力,何乐而不为?并查集类的补充:Count函数 在我之前的一篇文章中,用一个类封装了并查集的基本操作。而现在我们针对在畅通工程中遇到的一个问题,我们对这个类进行一个简单的拓展,也就是增加一个简单的Count函数。这个函数用于计算集合的数量。 int Count(int s,int e)原创 2016-08-29 21:11:14 · 814 阅读 · 0 评论 -
并查集应用:入门级
题目引用自洛谷。 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系。规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚。如果x,y是亲戚,那么x的亲戚都是y的亲戚,y的亲戚也都是x的亲戚。第一行:三个整数n,m,p,(n以下m行:每行两个数Mi,Mj,1接下来p行:每行两个数Pi,Pj,询问Pi和P原创 2016-08-29 20:14:37 · 384 阅读 · 0 评论 -
并查集初探(一) 核心代码
在本文中,我们将并查集的基本操作封装为一个类,以便后面研究并查集的相关问题。class UnionFindSet{ public: int father[UFS_LIMIT]; UnionFindSet() { for(int i=0;i<UFS_LIMIT;i++) father[i]=i; return; } int Fi原创 2016-08-29 18:21:01 · 587 阅读 · 0 评论 -
Splay模板 - v2.1
蒟蒻成功达成一次性AC模板,在此纪念。#include<cstdio>using namespace std;int fa[100005],ch[100005][2],k[100005],size[100005],cnt[100005],m,ind=0,root=0;void update(int p){ size[p]=size[ch[p][0]]+size[ch[p][1]]+cn原创 2017-08-24 15:46:39 · 336 阅读 · 0 评论