随笔分类 -  数据结构

摘要:A 机器人王国的路径长度 题目描述 在一个机器人王国里,围绕首都分\(N\)层构建卫星城市。以首都为圆心,以路相连分出两个卫星城在第一个层,然后每个卫星城又有路相连分出两个卫星城在下一层,但每条路的长度不同。第\(N\)层的卫星城不再分出新的卫星城。现在人类只探知到所有直接相连的城市间的路程,你能计 阅读全文
posted @ 2025-06-24 13:03 _P_D_X 阅读(71) 评论(0) 推荐(0)
摘要:直接插入排序 时间复杂度:\(O(n^2)\) 空间复杂度:\(O(1)\) 稳定性:√ 代码 void sort(int* a, int l, int r) { int temp, j; for (int i = l + 1; i <= r; i++) { temp = a[i]; for (j 阅读全文
posted @ 2025-06-20 22:14 _P_D_X 阅读(12) 评论(0) 推荐(0)
摘要:A 二叉链表存储的二叉树 空格代表NULL,这样就可以唯一的确定一个二叉树,先序序列怎么遍历,就怎么建树 (中序,中序。。。。。神入题目) #include<iostream> #include<vector> #include<string> using namespace std; struct 阅读全文
posted @ 2025-06-17 17:35 _P_D_X 阅读(23) 评论(0) 推荐(0)
摘要:最近公共祖先(LCA) 倍增算法 建立两个数组: \(dep[u]\)存储\(u\)点的深度; \(fa[u][i]\)存储\(u\)点向上\(2^i\)层的祖先节点\((i = 0,1,2···)\). 1.DFS树,创建ST表 倍增递推:\(fa[u][i] = fa[fa[u][i-1][i- 阅读全文
posted @ 2025-06-16 20:11 _P_D_X 阅读(18) 评论(0) 推荐(1)
摘要:强连通分量Tarjan算法 USACO06JAN] The Cow Prom S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 强连通:若一张有向图的节点两两可达,则称这张图是强连通的 强连通分量\((SCC)\):极大的强连通子图 Tarjan算法 时间戳\(dfn[x]\): 阅读全文
posted @ 2025-06-16 20:10 _P_D_X 阅读(13) 评论(0) 推荐(0)
摘要:最小生成树(MST) Prim算法 \(e[u]\)存\(u\)点的所有邻边的终点和边权 \(d[u]\)存\(u\)点与圈外邻点的最小距离,\(vis[u]\)标记\(u\)点是否出圈 基础版本 算法流程类似于Dijkstra算法,不断选距离最小的点出圈,直到圈内为空 初始化,所有点都在圈(集合) 阅读全文
posted @ 2025-06-16 20:09 _P_D_X 阅读(20) 评论(0) 推荐(0)
摘要:拓扑排序 给定一张有向无环图,求出关于顶点的一个排序\(A\),满足:对于图中的每个有向边\((x,y)\),\(x\)在\(A\)中都出现在\(y\)之前,则称\(A\)是该图顶点的一个拓扑序 拓扑排序可以 判断有向图中是否有环 生成拓扑序列 Kahn算法 \(e[x]\)存点\(x\)的邻接点, 阅读全文
posted @ 2025-06-16 20:08 _P_D_X 阅读(18) 评论(0) 推荐(0)
摘要:最短路算法 BFS BFS本身就是最短路算法,适合无权值的无向图 Dijkstra 基于贪心思想的单源最短路算法 \(e[u]\)存节点\(u\)的所有出边的终点和边权; \(d[u]\)存\(u\)到源点\(s\)的最小距离,初始化时,\(d[s]=0,d[u](u\neq s)=INF\); \ 阅读全文
posted @ 2025-06-16 20:07 _P_D_X 阅读(15) 评论(0) 推荐(0)
摘要:转载出处董晓老师 1.邻接矩阵 二维数组\(w[u][v]\)存储点\(u\)到点\(v\)的边权 时间复杂度:\(O(n^2)\) 空间复杂度:\(O(n^2)\) 应用:稠密图以外基本不用 (1)加边操作 void add(int a, int b, int c) { w[a][b] = c; 阅读全文
posted @ 2025-06-16 20:04 _P_D_X 阅读(9) 评论(0) 推荐(0)
摘要:堆(heap),stl里的priority_queue,模板如下: #include<iostream> using namespace std; //堆:完全二叉树 //小根堆:父节点<=子节点 //大根堆:父节点>=子节点 const int N = 1000010; int a[N], cnt 阅读全文
posted @ 2025-06-16 19:39 _P_D_X 阅读(9) 评论(0) 推荐(0)
摘要:层序遍历相关 102 二叉树的层序遍历 class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; if(root == nullptr) return res; 阅读全文
posted @ 2025-06-15 11:04 _P_D_X 阅读(23) 评论(0) 推荐(0)
摘要:前序+中序创建二叉树(确定后序) 子串的切分:\(pre[L_1,R_1]\)和\(in[L_2,R_2]\)中,可以锁定根节点的值\(root=pre[L_1]\)和根节点在\(in\)序列的下标\(p(0-based)\) 进而可以确定左子树的大小为\(left\_size = p - L_2\ 阅读全文
posted @ 2025-06-15 09:54 _P_D_X 阅读(15) 评论(0) 推荐(0)
摘要:一般树 前序:进入节点空间记录 后序:离开节点空间记录 void dfs(int u, vector<char>& pre, vector<char>& post) { pre.push_back(toc(u)); for (int v : ch[u]) dfs(v, pre, post); pos 阅读全文
posted @ 2025-06-15 09:15 _P_D_X 阅读(7) 评论(0) 推荐(0)
摘要:A 统计回文子串 暴力方法\(O(n^3)\)都会,这里介绍几种不一样的 (1)动态规划 设\(dp[i][j]\)表示子串\(s[i,j]\)是否为回文串: 当\(i=j\)时,\(s[i,i]\)是回文子串,\(dp[i][i]=1\) 当\(j-i=1\)时,\(dp[i][j]\)取决于\( 阅读全文
posted @ 2025-06-10 16:36 _P_D_X 阅读(16) 评论(0) 推荐(0)
摘要:A 子串个数 长度为\(n\)的字符串,其子串个数为\(\frac{n(n+1)}{2}+1\) B KMP KMP算法 给定一个模式串\(P\)和一个主串\(S\),求模式串\(P\)在主串\(S\)中出现的位置 求\(next[]\)数组 \(next[i]\)表示\(P[1,i]\)中相等前后 阅读全文
posted @ 2025-06-10 13:06 _P_D_X 阅读(40) 评论(0) 推荐(0)
摘要:线段树维护区间和 LuoguP3372 线段树(分治+懒标记)模板 线段树基础操作 1.建立线段树 build(int p,int l,int r) 2.区间修改 update(int p,int x,int y,LL k) 3.区间查询 query(int p,int x,int y) #incl 阅读全文
posted @ 2025-06-06 15:44 _P_D_X 阅读(11) 评论(0) 推荐(0)
摘要:A #include<iostream> #include<map> using namespace std; map<string, int> mp; int n, s; string name; int main() { cin >> n; for (int i = 1; i <= n; i++ 阅读全文
posted @ 2025-06-05 15:41 _P_D_X 阅读(74) 评论(1) 推荐(2)
摘要:A 找新朋友 考察欧拉函数\(\phi(n)\):\([1,n]\)中与\(n\)互质的数的个数 欧拉函数性质: (1)当\(p\)为质数时,\(\phi(p)=p-1\) (2)当\(p\)为质数时,$ \phi(p^k) = (p-1) p^{k-1}$ 证明:考虑把整数\([1,p^{k}]\ 阅读全文
posted @ 2025-06-03 17:00 _P_D_X 阅读(54) 评论(0) 推荐(0)
摘要:1.直接判定出栈序列是否合法 入栈序列的每一个元素都会入栈依一次,对比栈顶元素既可以得到出栈的时机,若元素不能全部出栈,该序列自然是不合法的 class Solution { public: bool validateStackSequences(vector<int>& pushed, vecto 阅读全文
posted @ 2025-06-03 12:46 _P_D_X 阅读(36) 评论(0) 推荐(0)