2021年5月6日

算法学习(15):KMP

摘要: 声明 本文主要是一些代码,加一些例题,基本为模板,仔细内容讲解会给出其他博主的链接 如果想要知道一个字符串是否在另一个字符串中出现过,那么首先想到的就是暴力枚举 #include<iostream> #include<cstdio> #include<cstring> #include<algori 阅读全文

posted @ 2021-05-06 10:15 小星◎ 阅读(67) 评论(0) 推荐(0)

算法学习(14):树链刨分(重链刨分)

摘要: 树链刨分 代码 第一个 DFS 记录每个结点的父节点(father)、深度(deep)、子树大小(size)、重子节点(hson)。 第二个 DFS 记录所在链的链顶(top,应初始化为结点本身)、重边优先遍历时的 DFS 序(dfn)、DFS 序对应的节点编号(rank)。 void dfs1(i 阅读全文

posted @ 2021-05-06 10:01 小星◎ 阅读(83) 评论(0) 推荐(0)

算法学习(13):树的重心

摘要: 树的重心 // 这份代码默认节点编号从 1 开始,即 i ∈ [1,n] int size[MAXN], // 这个节点的“大小”(所有子树上节点数 + 该节点) weight[MAXN], // 这个节点的“重量” centroid[2]; // 用于记录树的重心(存的是节点编号) void Ge 阅读全文

posted @ 2021-05-06 08:56 小星◎ 阅读(65) 评论(0) 推荐(0)

算法学习(12):最近公共祖先(LCA)

摘要: 最近公共祖先(LCA) 倍增算法 #include <cstdio> #include <cstring> #include <iostream> #include <vector> #define MXN 50007 using namespace std; std::vector<int> v[ 阅读全文

posted @ 2021-05-06 08:51 小星◎ 阅读(70) 评论(0) 推荐(0)

算法学习(11):树的直径

摘要: 树的直径 做法一:两次DFS const int N = 10000 + 10; int n, c, d[N]; vector<int> E[N]; void dfs(int u, int fa) { for (int v : E[u]) { if (v == fa) continue; d[v] 阅读全文

posted @ 2021-05-06 08:45 小星◎ 阅读(82) 评论(0) 推荐(0)

导航