数据结构
沙茶
这个作者很懒,什么都没留下…
展开
-
栈和队列
栈操作规则:先进后出,先出后进 操作:入栈,出栈,判断栈是否为空,取出栈顶元素,计算栈中元素个数 dfs和栈队列操作规则:先进先出,后进后出 操作:入队,出队,判断队是否为空,取出队首元素,计算队列中元素个数 bfs和队列循环队列,双向队列原创 2016-11-16 14:49:34 · 225 阅读 · 0 评论 -
二叉树
存储:用图的方法或用一维数组存 遍历:前中后序遍历使用dfs实现,按层遍历bfs,深度遍历dfsvoid q(int x)//前序 { if(x==0) return; printf("%d",root); q(t[x].l); q(t[x].r); }无根树转有根树:一般用dfs原创 2016-11-16 15:00:19 · 200 阅读 · 0 评论 -
[hdu1272] 小希的迷宫
题目链接题解:判断联通无环图#include <iostream> #include <cstdio> using namespace std; const int MX=100005; int n,m,p,q; int flag,tot; int f[MX+5],rk[MX+5],vis[MX+5]; inline int find(int x){ if(f[x]==x) return x原创 2016-08-25 23:18:24 · 194 阅读 · 0 评论 -
[hdu1232] 畅通工程
题目链接题解:这题的主要思想在于:找出连通分量的个数, 减一之后就是所求最小需要添加的路径数。#include <iostream> #include <cstdio> using namespace std; int n,m,p,q; int ans; int f[1005],rk[1005]; inline int find(int x){ if(f[x]==x) return x;原创 2016-08-25 23:02:12 · 173 阅读 · 0 评论 -
[hdu1213] How Many Tables
题目链接题解:求连通分支的个数. 两种方式: 1.可以求出一共有多少个根节点(即fa[i]==i的个数) 2.可以用原始连通分量数n 减去有效的合并次数。 即每次合并两个连通分量就会使得总的分量数目减少1.#include <iostream> #include <cstdio> using namespace std; int n,m,p,q; int T,ans; int f[1005]原创 2016-08-25 22:56:48 · 169 阅读 · 0 评论 -
堆和平衡树
堆 维护一棵完全二叉树 找最值可看成O(1),找其他元素只能一个个遍历平衡树 是一种二叉排序树 二叉排序树是一种比较有用的折衷方案。 数组的搜索比较方便,可以直接用下标,但删除或者插入某些元素就比较麻烦。 链表与之相反,删除和插入元素很快,但查找很慢。 二叉排序树就既有链表的好处,也有数组的好处。 在处理大批量的动态的数据是比较有用。将查找的时间复杂度保证在O(logN)范围内。原创 2016-11-16 15:14:05 · 478 阅读 · 0 评论 -
图
描述元素(点)间的多对多关系(边权)利用图论模型和经典算法,可以解决很多问题原创 2016-11-16 15:21:35 · 171 阅读 · 0 评论 -
并查集
合并,查找,集合用到了树的父结点表示法。在并查集中,每个元素都保存自己的父亲结点的编号,如果自己就是根结点,那么父亲结点就是自己。这样就可以用树形结构把在同一集合的点连接到一起了。优化:路径压缩和启发式合并倒过来,可以把删除变成合并原创 2016-11-16 15:03:36 · 205 阅读 · 0 评论