2021年5月7日

C++之STL(2):Algorithm

摘要: reverse #include<iostream> #include<algorithm> using namespace std; int main() { int a[5] = {11,22,33,44,55}; reverse(a,a+5); for(int i = 0; i < 5; i+ 阅读全文

posted @ 2021-05-07 08:48 小星◎ 阅读(95) 评论(0) 推荐(0)

2021年5月6日

算法学习(15):KMP

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

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

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

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

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

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

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

posted @ 2021-05-06 08:56 小星◎ 阅读(61) 评论(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 小星◎ 阅读(64) 评论(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 小星◎ 阅读(79) 评论(0) 推荐(0)

2021年5月5日

C++之STL(1):vector

摘要: vector vector简介 vector 实现的是一个动态数组,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间,整个过程无需人工干预。 vector创建 //1. 最简单创建一个vector vector<int> ve; //2. 含有5个数的vector v 阅读全文

posted @ 2021-05-05 18:59 小星◎ 阅读(63) 评论(0) 推荐(0)

算法学习(10):乘法逆元

摘要: 逆元 扩展欧几里得 void exgcd(int a, int b, int &x, int &y) { if (b == 0) { x = 1, y = 0; return; } exgcd(b, a % b, y, x); y -= a / b * x; } 快速幂 inline int qpo 阅读全文

posted @ 2021-05-05 18:45 小星◎ 阅读(61) 评论(0) 推荐(0)

算法学习(9):筛法

摘要: 线性筛(欧拉筛) void init() { phi[1] = 1; for (int i = 2; i < MAXN; ++i) { if (!vis[i]) { phi[i] = i - 1; pri[cnt++] = i; } for (int j = 0; j < cnt; ++j) { i 阅读全文

posted @ 2021-05-05 18:30 小星◎ 阅读(73) 评论(0) 推荐(0)

算法学习(8):单调队列

摘要: 单调队列 单调队列是一种主要用于解决滑动窗口类问题的数据结构,即,在长度为n的序列中,求每个长度为m的区间的区间最值。 //得到的是一个单调递减的队列 deque<int> Q; // 存储的是编号 for (int i = 0; i < n; ++i) { if (!Q.empty() && i 阅读全文

posted @ 2021-05-05 18:23 小星◎ 阅读(44) 评论(0) 推荐(0)

导航