code
hhh
Soanwe
这个作者很懒,什么都没留下…
展开
-
数据结构--堆
把一组数放到堆(heap[])里,把堆抽象成一个完全二叉树(令堆顶元素的下标为1),若某元素的下标为x,则左边的子节点的下标为2*x,右边的子节点的下标为2*x+1。 一、up函数: void up(int u)//如果该元素的父节点对应的元素heap[u/2]>该元素heap[u],则将heap[u]向上调整; { while(u/2>=1&&heap[u/2]>heap[u]) { swap(heap[u/2],he..原创 2022-01-28 17:31:01 · 1376 阅读 · 0 评论 -
例题--字符串哈希
/*输入样例 8 3 aabbaabb 1 3 5 7 1 3 6 8 1 2 1 2 */ #include<iostream> using namespace std; typedef unsigned long long ULL; const int N=100010; ULL h[N],p[N],P=131; char str[N]; ULL get(int l,int r) { return h[r]-h[l-1]*p[r-l+1]; } int main() { i...转载 2022-02-09 21:56:35 · 150 阅读 · 0 评论 -
例题--哈希表(模拟散列表)
/* 输入样例 5 I 1 I 2 I 3 Q 2 Q 5 */ #include<iostream>//模拟散列表 (开放寻址法) #include<cstring> using namespace std; const int N=200003,null=1e9+1;//开放寻址法需要数组范围需要开到给出数据范围的2~3倍 int h[N],e[N],ne[N],idx; int find(int x) { int k=(x%N+N)%N; ...转载 2022-02-09 20:03:49 · 147 阅读 · 0 评论 -
搜索与图论--有向图的拓扑序列
1、(1)有几个箭头指向的点称为有几个入度 (2)一个点有几个箭头指出则有几个出度 2、出度和入度都为0的点是孤立的点 3、有自环的图没有拓扑序列,因为没有入度为0的点 4、没有自环的有向图有拓扑序列。 #include<iostream> using namespace std; const int N=100010; int n,m; int h[N],e[N],ne[N],idx;//链表 int q[N],d[N];//队列和入度 void add(int a,in.原创 2022-02-15 21:41:01 · 298 阅读 · 0 评论 -
数据结构--哈希表
哈希表的主要作用: 把一个庞大的空间或值域映射到一个比较小的空间(10^5~10^6) 映射做法:x%(10^5~10^6); 因为值x的范围(10^9)比较大,映射的范围(10^5~10^6)比较小,所以可能会产生冲突(把若干不同的数映射成同一个数) 一、存储结构 题目:例题--哈希表(模拟散列表)_宋菜菜的博客-CSDN博客 1、开放寻址法 开一个比题目数据范围大2~3倍的数组(防止冲突),每一个值x插入或查找时,通过find函数返回值x需要插入或查找的下标。 int find(int原创 2022-02-09 21:57:53 · 120 阅读 · 0 评论 -
数据结构--并查集
一、并查集 1)集合合并 2)查询元素所在的集合编号 3)判断两个元素是否在同一个集合里面 二、把集合抽象成一个树状图,用树根作为该集合的集合编号。 设p[x]为x的集合编号,p[x]即为树根,集合编号p[x]可以当作x的父亲。 1)如何判断树根:如果p[x]=x,则p[x]为x的树根。 2)如何求x的集合编号:while(p[x]!=x) p[x]=p[p[x]]; 如果p[x]不是x的树根,就让p[x]等于p[x]的父节点。 3)如何合并两个集合:设p[...原创 2022-01-26 20:02:23 · 336 阅读 · 0 评论 -
DFS&BFS
一、深度优先搜索(DFS) 按分支搜索,搜到最后再回溯(深度优先的原则)。 时间复杂度:O(n) #include<iostream> using namespace std; const int N=10; int n; int path[N]; bool st[N]; void dfs(int u) { if(u==n) { for(int i=0;i<n;i++) printf("%d ",path[i]); puts(""); return; } f转载 2022-02-11 19:37:53 · 105 阅读 · 0 评论 -
搜索与图论--树与图的遍历
一、树与图的深度优先遍历 #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int N=100010,M=N*2; int n; int ans=N; int h[N],e[N],ne[N],idx; bool st[N]; void add(int a,int b) { e[idx]=b;ne[idx]=h[a];h[a]=idx++;/.翻译 2022-02-13 21:28:51 · 113 阅读 · 0 评论