自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 ST表

文章目录前言一、输入并预处理lg数组二、更新最值三、查询(query)总结前言所谓的ST表,其实就是用递归思想以尽量实现O(1)的查询,当然不可能直接查询,必须要先预处理一下。一、输入并预处理lg数组 cin>>n>>m; lg[0]=-1; for(i=1;i<=n;++i) { scanf("%d",&st[i][0]); lg[i]=lg[i>>1]+1; }二、更新

2021-02-28 00:00:08 205

原创 Hash表

文章目录前言一、哈希函数的构造方法hash函数设计的考虑因素二、哈希冲突哈希冲突的解决方案三、hash表的查找hash表的查找效率四、hash表的删除前言哈希函数就是根据key计算出应该存储地址的位置,而哈希表是基于哈希函数建立的一种查找表。一、哈希函数的构造方法1.直接定制法哈希函数为关键字的线性函数如 H(key)=a*key+b。这种构造方法比较简便,均匀,但是有很大限制,仅限于地址大小=关键字集合的情况。2.数字分析法假设关键字集合中的每个关键字key都是由s位数字组成(k1,k

2021-02-27 00:08:44 149

原创 树上倍增求LCA

文章目录定义求LCA定义指的就是对于一棵有根树,若结点z既是x的祖先,也是y的祖先,那么z就是结点x和y的最近公共祖先。求LCA对于朴素思想,就是我要一步一步往上爬,一步一步走。先把结点x和y整到同一深度,然后再一次一个深度的往上查,直到祖先一样才break。但是,一步一步太慢了。那么,考虑跳着走,跳着走的条件就是要满足一步步数尽可能多并且不跳过。在满足这两个条件的情况下,有LCA算法:一步跳2的n次方。对于每一步跳跃,我们要预处理一个二维数组f(father)f[x][i],表示对于

2021-02-23 23:37:54 124

原创 向量

文章目录向量向量的模注意极角点积点积的应用法向量:与单位向量垂直的向量称为单位法向量二维叉积向量有大小有方向的量,又称为矢量。二维的向量常用一个对数(x,y)表示,代码中常用一个结构体来实现向量。struct vector{ double x,y; vector (double X=0,double Y=0) { x=X,y=Y; }}向量的模即向量的长度a=(x,y)|a|=sqrt(x2+y2)double len(vector a)

2021-02-07 23:14:45 330

原创 Link cut tree

文章目录前言思想概念基础操作:so、link、if_root核心操作:access重要操作:makeroot前言维护一棵树,支持以下操作:1.链上求和;2.链上求最值;3.链上修改;  4.子树修改;5.子树求和;6.换根;7.断开树上一条边;8.连接两个点,保证连接后仍然是一棵树。思想树链剖分有重链和轻边。LCT也一样,分实(重)边和虚(轻)边。一个节点最多连出一条向儿子的实边,因此实边会聚集成链。根据树链剖分的思想,需要用一种数据结构来维护实边组成的链。树链剖分使用了线段树来

2021-02-07 01:59:04 130

原创 伸展树的操作

文章目录查找插入伸展删除查找查找函数search:bool search(Tree &root,ElementType val){ Tree parent=NULL; Tree *temp=NULL; temp=search_val(root,val, parent); if (*temp && *temp!=root) { SplayTree(root,*temp); return true

2021-02-06 00:37:29 273

原创 树链剖分

文章目录前言概念性质算法实现前言“在一棵树上进行路径的修改、求极值、求和”乍一看只要线段树就能轻松解决,实际上,仅凭线段树是不能搞定它的。我们需要用到一种貌似高级的复杂算法——树链剖分。概念树链,就是树上的路径。剖分,就是把路径分类为重链和轻链。记siz[v]表示以v为根的子树的节点数,dep[v]表示v的深度(根深度为1),top[v]表示v所在的重链的顶端节点,fa[v]表示v的父亲,son[v]表示与v在同一重链上的v的儿子节点(姑且称为重儿子),w[v]表示v与其父亲节点的连边(姑且称为

2021-02-05 01:37:16 81

原创 圆方树

文章目录前言定义构造性质前言其实解决仙人掌 DP 问题不过就是参照树上的解法然后对环上的情况特殊处理一下,把环的信息记录到一个点上。既然如此,仙人掌的许多问题在树上都有现成的解法,何不直接把仙人掌变成树。由此,这种树被称为圆方树。圆方树,能解决大多数静态仙人掌问题。定义仙人掌 G=(V,E) 的圆方树 T=(VT,ET) 为满足下列条件的无向图:1.VT=RT∪ST,RT=V,RT∩ST=ϕ ,我们称 RT 集合为圆点, ST 集合为方点;2.∀e∈E ,若 e 不在任何简单环中,则

2021-02-03 01:05:13 78

原创 二分图最大权匹配

文章目录KM算法的正确性基于以下定理:KM算法原理KM算法的正确性基于以下定理:若由二分图中所有满足A[i]+B[i]=w[i][j]的边C(i,j)构成的子图(即相等子图)有完备匹配,那么这个完备匹配就是二分图的最大权匹配。KM算法原理1.基本原理该算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题。设顶点V1的顶标lx[i],V2顶点的顶标为LY[j],顶点V1的i与V2的j之间的边权为V(i,j)。在算法执行的过程中,对于任一条边C(i,j),LX[i

2021-02-01 01:26:31 407

原创 欧拉回路

文章目录前言定理及推论欧拉通路回路存在的判断欧拉回路的求解前言如果图G(有向图或者无向图)中所有边一次仅且一次行遍所有顶点的通路称作欧拉通路。如果图G中所有边一次仅且一次行遍所有顶点的回路称作欧拉回路。具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉通路但不具有欧拉回路的图称为半欧拉图。定理及推论无向图G存在欧拉通路的充要条件是:G为连通图,并且G仅有两个奇度结点(度数为奇数的顶点)或者无奇度结点。推论1:当G是仅有两个奇度结点的连通图时,G的欧拉通路必以此两个结点为端点。当G是无

2021-01-30 23:59:28 90

原创 二分图匹配——匈牙利算法

文章目录二分图二分图匹配最大匹配增广路径增广路径性质匈牙利算法找增广路径的算法代码实现二分图二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。二分图匹配给定一个二分图

2021-01-30 00:32:47 116

原创 最小生成树

文章目录前言普里姆算法—Prim算法普里姆算法—代码实现克鲁斯卡算法克鲁斯卡算法——代码实现前言构造最小生成树有很多算法,但是都是利用了最小生成树的同一种性质:MST性质(假设N=(V,{E})是一个连通网,U是顶点集V的一个非空子集,如果(u,v)是一条具有最小权值的边,其中u属于U,v属于V-U,则必定存在一颗包含边(u,v)的最小生成树),下面就介绍两种使用MST性质生成最小生成树的算法:普里姆算法和克鲁斯卡尔算法。普里姆算法—Prim算法算法思路:首先就是从图中的一个起点a开始,把a加

2021-01-29 03:23:52 103

原创 BSGS

文章目录前言解高次同余方程:前言可以较高效的求解形如Ax≡B(mod C)(C是素数)的同余方程。解高次同余方程:1.讨论A^X=B(mod C)的情形。代码://A^X=B(mod C)求X C为整数#define MOD 76543int hs[MOD],head[MOD],next[MOD],id[MOD],top;void insert(int x, int y){ int k = x%MOD; hs[top] = x, id[top] = y, next[t

2021-01-27 23:05:58 102

原创 中国剩余定理

文章目录中国剩余定理代码中国剩余定理在《孙子算经》中有这样一个问题:“今有物不知其数,三三数之剩二(除以3余2),五五数之剩三(除以5余3),七七数之剩二(除以7余2),问物几何?”这个问题称为“孙子问题”,该问题的一般解法国际上称为“中国剩余定理”。具体解法分三步:1.找出三个数:从3和5的公倍数中找出被7除余1的最小数15,从3和7的公倍数中找出被5除余1 的最小数21,最后从5和7的公倍数中找出除3余1的最小数70。2.用15乘以2(2为最终结果除以7的余数),用21乘以3(3为最终结果除以

2021-01-27 01:54:51 953

原创 欧拉函数

文章目录欧拉函数的定义:欧拉函数的性质:欧拉函数模板:欧拉函数的定义:在数论中,对于正整数N,少于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,记作φ(n)。φ函数的值:φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))……(1-1/p(n)) 其中p(1),p(2)…p(n)为x的所有质因数;x是正整数; φ(1)=1(唯一和1互质的数,且小于等于1)。注意:每种质因数只有一个。欧拉函数的性质:(1) p^k型欧拉函数:若N是

2021-01-26 01:16:13 131

原创 拓扑排序应用

题目链接: https://vjudge.net/problem/description/124483?1611025995000.按照拓扑排序倒着构图。代码如下:#include<queue>#include<cstdio>#include<iostream>using namespace std; const int N = 2e5+6; int n;int num[N];int m[N]={0};int main(){ priority

2021-01-25 00:41:00 90

原创 ABC189F题

题目链接: https://atcoder.jp/contests/abc189/tasks/abc189_f.难点在于有返回0广场时,旋转轮子次数的期望值。代码如下:#include<iostream>#include<cstdio>using namespace std;const int BUF = 100005; int nCell, nMove, nBackCell;int backCell[BUF]; void read() { cin

2021-01-24 00:17:45 236 2

原创 2-SAT

文章目录概念算法的过程如下:模型概念适定性问题:适,就是合适,定,就是确定,适定性问题通俗的说就是确定是否可以满足所有的条件?或者说就是确定一个满足所有条件的方案。通俗的sat问题表述一般是这样的:有很多个集合,每个集合里面有若干元素,现给出一些取元素的规则,要你判断是否可行,可行则给出一个可行方案。如果所有集合中,元素个数最多的集合有k个,那么我们就说这是一个k-sat问题,同理,2-sat问题就是k=2时的情况。为什么研究2-sat呢?无可置疑的是它很有用。为什么不研究3-sat乃至k更大的情

2021-01-23 02:04:04 84

原创 拓扑排序

文章目录概述一、应用三、实现概述在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。且该序列必须满足下面两个条件:1.每个顶点出现且只出现一次。2.若存在一条从顶点 A 到顶点 B 的路径,那么在序列中顶点 A 出现在顶点 B 的前面。有向无环图(DAG)才有拓扑排序,非DAG图没有拓扑排序一说。通常,一个有向无环图可以有一个或多个拓扑排序序列。一、应用拓扑排序通常用来“排序”具有依赖

2021-01-21 03:30:58 109

原创 欧几里得算法

文章目录辗转相除法简介:辗转相除法举例:辗转相除法代码实现:欧几里德算法知识点:辗转相除法简介:辗转相除法, 又名欧几里德算法,是求最大公约数的一种方法。它的具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。另一种求两数的最大公约数的方法是更相减损法。辗转相除法举例:求 10 ,25的最大公约数:25 / 10 = 2 ······5

2021-01-20 05:07:24 127

原创 高级数据结构

文章目录TreeNodeListNodeTreeLinkNodeRandomListNodeUndirectedGraphNodeTreeNodestruct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};TreeNode是经典的二叉树节

2021-01-19 02:04:33 144

原创 线段树

文章目录一、线段树二、线段树的基本内容三、线段树的基本操作一、线段树1、线段树的树形结构:线段树是一种二叉搜索树,什么叫做二叉搜索树,首先满足二叉树,每个结点度小于等于二,即每个结点最多有两颗子树,何为搜索,我们要知道,线段树的每个结点都存储了一个区间,也可以理解成一个线段,而搜索,就是在这些线段上进行搜索操作得到你想要的答案。2、线段树的应用:线段树的适用范围很广,可以在线维护修改以及查询区间上的最值,求和。更可以扩充到二维线段树(矩阵树)和三维线段树(空间树)。对于一维线段树来说,每次更新以

2021-01-18 01:28:00 70

原创 tuple类型

文章目录前言一、对于tuple的使用实例:二、tuple支持的操作:三、实现tuple:前言在c++当中没有提供一个方便的数据结构可以实现不同类型的对象的打包。唯一能够实现的操作也是通过struct定义不同的类型的成员进行打包,这样在处理不同的类型的时候都要写上一遍不同的定义使用起来很麻烦。所以c++标准库在c++11里添加了tuple这样一个类模板,通过它可以进行不同类型的数据的打包从而可以方便的实现函数的多返回值。一、对于tuple的使用实例:#include <iostream&gt

2021-01-16 00:02:07 188

原创 队列

文章目录一、概念二、顺序队列三、循环队列四、链式队列一、概念只允许在一端插入数据操作,在另一端进行删除数据操作的特殊线性表;进行插入操作的一端称为队尾(入队列),进行删除操作的一端称为队头(出队列);队列具有先进先出的特性。二、顺序队列(1)队头不动,出队列时队头后的所有元素向前移动缺陷:操作是如果出队列比较多,要搬移大量元素。(2)队头移动,出队列时队头向后移动一个位置如果还有新元素进行入队列容易造成假溢出。假溢出:顺序队列因多次入队列和出队列操作后出现的尚有存储空间但不能进行入队列操

2021-01-15 01:51:47 99

原创 二分查找

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、二分查找的框架二、寻找一个数(基本的二分搜索)三、寻找左侧边界的二分搜索四、寻找右侧边界的二分查找总结前言对于二分查找:Although the basic idea of binary search is comparatively straightforward, the details can be surprisingly tricky.一、二分查找的框架int binarySearch(int[] nu

2021-01-13 20:02:30 160 1

原创 贪心

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录定义解题的一般步骤例子定义贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,只做出在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关。解题的一般步骤1.建立数学模型来描述问题;2.把求解的问题分成若干个子问题;3.对每一子问题求解,得到子问题的局部

2021-01-13 01:57:18 75

原创 枚举

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录枚举类型的定义:格式说明:应用举例:重要提示:枚举变量的使用相关操作枚举类型的定义:枚举类型是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。定义格式:枚举类型的定义格式为:enum <类型名> {<枚举常量表>};提示:以下是本篇文章正文内容,下面案例可供参考格式说明:1、关键字enum——指明其后的标识符是一个枚举类型的名字。2、枚举常量表——由枚举常量构成。“枚举

2021-01-12 02:09:48 74

原创

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录概述一、线性存储二、链接存储概述栈是一种操作受限的线性表只允许从一端插入和删除数据。栈有两种存储方式,即线性存储和链接存储(链表)。栈的一个最重要的特征就是栈的插入和删除只能在栈顶进行,所以每次删除的元素都是最后进栈的元素,故栈也被称为后进先出表。每个栈都有一个栈顶指针,它初始值为-1,且总是指向最后一个入栈的元素,栈有两种处理方式,即进栈和出栈,因为在进栈只需要移动一个变量存储空间,所以它的时间复杂度为O(1),但是对于出栈

2021-01-10 03:28:38 92

原创 一元多项式求和

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录题目要求代码题目要求已知一元多项式:A(x)=a0+a1x+a2x2+a3x3+….anxn, B(x)= b0+b1x+b2x2+b3x3+….bmxm设计算法实现C(x)=A(x)+B(x)。功能包括输入多项式A,输入多项式B,求A和B的和,显示求和后的结果等操作。本题中,链表的第一个元素位置为1,链表的数据域包含coef和exp,其中coef为系数,exp为指数。各个命令以及相关数据的输入格式如下:输入多项式A:

2021-01-09 02:19:46 375

原创 约瑟夫环问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录基本问题描述一、模拟二、简化三、递归基本问题描述已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解。通常,我们会要求输出最后一位出列的人的序号。那么这里主要研究的是最后一个出列的人的序号要怎么确定。一、模拟

2021-01-08 00:00:01 101

原创 线性表(二)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录线性表的抽象数据类型描述线性表的抽象数据类型描述基本操作如下:1.线性表的置空操作clear():将一个已经存在的线性表置为空表。2.线性表判空操作isEmpty():判断线性表是否为空,若为空,则返回true;否则,返回为false。3.求线性表的长度操作length():求线性表中的数据元素的个数并返回其值。4.取元素操作get(i):读取并返回线性表中的第i个数据元素的值。其中i的取值范围为0≤i≤length(

2021-01-07 02:22:04 300

原创 线性表(一)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、 定义二、线性表的两种实现方式1.顺序表示2.链表前言 线性表是一种最基本、最简单的数据结构。数据元素之间仅具有单一的前驱和后继关系。一、 定义 线性表是n个数据特性相同的元素的组成有限序列,是最基本且常用的一种线性结构(线性表,栈,队列,串和数组都是线性结构),同时也是其他数据结构的基础。对于非空的线性表或者线性结构的特点:(1)存在唯一的一个被称作“第一个”的数据元素;(2)存在唯

2021-01-07 01:50:05 161

原创 度量算法效率

度量算法效率前言 度量一个算法的效率,一个方法是事后统计,即先将算法实现,然后输入适当的数据运行,测算其时间和空间开销。其缺点显而易见,不仅编写程序实现算法将花费较多的时间和精力,而且实验结果依赖于计算机的软硬间等环境因素,容易掩盖算法本身的优劣。所以通常采用事前分析估算的方法估算算法所消耗的资源。一、算法的时间复杂度1、问题规模 不谈与计算机软硬件有关的因素,影响算法时间代价的最主要因素是问题规模。问题规模是指输入量的多少,一般情况下可以从问题描述中得到。一个显而易见的事实:几乎所有的算法

2021-01-05 22:33:37 681

C3-5-数据更新.ipynb

C3-5-数据更新.ipynb

2021-10-28

空空如也

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

TA关注的人

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