自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 acm知识点

2021-09-10 09:14:42 112

原创 vscode c++ 配置文件

tasks.json{ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format "version": "2.0.0", "tasks": [ { "type": "shell", "label": "g++.exe build active file",

2021-08-30 20:26:52 166

原创 lca最近公共祖先

朴素做法:一次遍历dfs生成的深度优先搜索树用一个数组 f 存储每个节点的父节点。用一个数组dep存储每个节点的深度。(从根到该节点)。求lca(x, y),根据x,y的深度往父节点跳,假设y的深度比x大,则先把y节点往上跳到与x相同的深度所在的节点yy。再同时把x,y往各自的父节点处跳,当x == y时即找到了lca(x,y)void dfs(int u, int fa){ f[u] = fa; dep[u] = dep[fa] + 1; for(int i = head

2021-08-13 17:43:55 100

原创 无根树的直径与重心

无根树:由无向(有向)连通图构成,如果连通图中由环,根据dfs生成的序列构成dfs深度优先生成树,广度也可.都可以称为无根树.树的直径:树上存在俩点之间的路径权重之和最大,称为树的直径树的重心:树上存在一点,以其为根,使得树上所有节点为根的子树节点数最小,重心最多存在两个.红色部分树的直径:求树的直径的方法:1.两次bfs/dfs思想:随机一个节点,进行一次dfs遍历,找到该节点最远的一个节点,再以该节点所对应的最远节点再进行一次dfs遍历即可.一次dfs找到以1为根的最长路径节点为6第

2021-08-12 11:23:20 1449

原创 线段树思想

什么是线段树?当你要面临一个问题需要反复区间修改以及查询区间内的某个结果(如区间和、区间最值),如果用朴素的暴力修改与查询时间复杂度会非常的高,这时利用线段树或者树状数组来维护就可以以O(log)级别的时间复杂度来得到结果,这就是线段树。如以下用长度为10的数组,来建立线段树,维护区间和,单点修改操作.用线段树构造的逻辑图如下所示,以数组下标左右两端为长度,进行划分,每次分两段,直至叶子节点(L == R)不能分为止。由上图可知,每个叶子节点 L == R 对应原数组一个对应值a[L] 或 a[

2021-07-20 21:20:37 101

原创 质数、质因数、约数的筛选与性质

数学知识目录数学知识名词解释1.合数2.质数3.约数一、质数1.试除法2.质数筛选3.质因数分解二、约数名词解释1.合数 合数:有一个整数n,在2~(n-1)的范围内能被其范围中的某些数整除。2.质数 质数:有一个整数n,在2~sqrt(n) 的范围内不能被任何数整除3.约数 约数:有一个整数n,在2-sqrt(n)范围内n能被整除的数一、质数1.试除法 根据定理的思想进行编写代码时间复杂度为O(sqrt(n))#include<iostream>#incl

2021-07-16 19:32:21 384

原创 树状数组性质与操作

在学习树状数组前,需要了解lowbit运算.什么是lowbit运算呢?lowbit(x)表示返回当前十进制x中,其二进制形式下低位处最先遇到1时,1所表示的值如 10100 , 低位处最先遇到1在二进制的第三位,则保留后三位, 100 转化位十进制为 4我们来算出前8的lowbit值1 -> 1B 0> 12 -> 10B -> 10B -> 23 -> 11B -> 1B - > 14 -> 100B -> 100B -&gt

2021-07-16 19:30:58 97

原创 并查集思想与用法

什么是并查集?并查集就是某件事件内,因某种条件的约束进行分类,在满足条件的情况下,分成几类,每类里面有多个元素,这些元素就是该类的孩子,此类就类似根,其逻辑形式表示为有多颗多叉树,组成的森林,其根表示不同类的情况.并查集思想:1.首先根据问题规模进行初始化,假设有规模为n的问题,设数组为fa[],fa[i] = i (1 <= i <= n),其表明每个初始状态为其本身,有n个节点的森林2.找到其所在的类的集合,即找到问题a的根节点处,当前节点距离根节点可能有多个节点处可用使用递归或

2021-07-16 15:00:45 123

原创 快速幂的思想以及应用

#include<iostream>#include<cstdio>#include<vector>using namespace std;const int MOD = 10000;vector<vector<int>>a(2,vector<int>(2,0));vector<vector<int>>f(2,vector<int>(1,0));vector<vecto

2021-07-11 10:47:09 183

原创 贪心算法以及证明

什么是贪心法?只注重眼前最优解而不注重全局最优解,即只解决了局部最优解,最终答案并不一定是全局最优解.问题包含贪思想时,通常解法:1.明确问题什么是最优解2.明确子问题什么是最优解3.是否可用子问题最优解推出全局最优解通常由价值最优,花费最小,价值密度等问题...

2021-07-09 11:14:19 379

原创 前缀与差分算法

假设现在有长度为n的a数组,每个数为a1 a2 a3 a4 a5…an前缀和数组用pre_sum表示长度同样为n现有如下定理:定理一: pre_sum[i] = pre_sum[i-1] + a[i]证明:pre_sum[1] = a[1]pre_sum[2] = pre_sum[1] + a[2] = a[1] + a[2]pre_sum[3] = pre_sum[2] + a[3] =...

2021-07-07 19:50:10 118

原创 欧几里得定理与扩展欧几里得定理

欧几里的定理(辗转相除法):gcd(a,b) = gcd(b,a%b) gcd(a,b)表示a,b的最大公约数证明:设 a > b c = a%ba = k * b + c (k为某个整数)情况1:若 c为 b的约数 即 b%c == 0,则c为a,b的最大公约数a%c = (k * b+c)%c = (k * b)%c + c%c = 0情况2:若c不为b的约数,即 b%c = d (d为某个整数)1)d为c的约数则,d为 b,c最大公约数,即为a b最大公约数2) d不为

2021-07-07 11:52:56 666

原创 优先队列用法以及例题学习

优先队列的另外一种名字叫堆,堆又分为小根堆,大根堆。小根堆:根为最小值,左右儿子都比根大,所以出队顺序为升序。大根堆:根为最大值,左右儿子都比根小,所以出队顺序为降序。在C++ 头文件<queue>中有priority_queue<类型>表示优选队列数据结构容器类.eg:priority_queue<类型>默认为大根堆 常用操作: push();//入队 top();//队首 与普通queue<>区别 queue 使用 front() po

2021-07-06 11:44:39 323 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除