自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 最短路径的求法(SPFA,dijkstra)

关于SPFA 算法大致流程是用一个队列来进行维护。 初始时将源加入队列。 每次从队列中取出一个元素,并对所有与他相邻的点进行松弛,若某个相邻的点松弛成功, 如果该点没有在队列中,则将其入队。 直到队列为空时算法结束。 判断有无负环:如果某个点进入队列的次数超过V次则存在负环

2022-04-09 09:07:04 247

原创 容斥原理的妙用

在计数时,必须注意没有重复,没有遗漏。 为了使重叠部分不被重复计算,人们研究出一种新的计数方法, 这种方法的基本思想是: 先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来, 然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复, 这种计数的方法称为容斥原理。

2022-03-31 10:06:57 474

原创 分治算法,逆序对,三维偏序与CDQ分治

当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。 对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。 如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。

2022-03-23 16:24:19 1511

原创 树状数组的基本操作

我们想要快速求数组中下标为 x ~ y 的数的和,大家第一时间都会想到用前缀和,时间复杂度为O(1) 但如果说要在线对数组进行修改的话,那用修改前缀和数组就会用O(n)的复杂度,对于q次询问,时间复杂度为O(qn),速度极不理想 这是我们就可以使用树状数组来维护 树状数组支持单点修改,单点查询,区间修改,区间查询等操作 首先我们要知道: 树状数组有一个很关键的东西,叫做lowbit, lowbit是将一个二进制数的所有高位一都去掉,只留下最低位的1, 比如lowbit(5)=lowbit

2022-03-19 14:54:07 405

原创 欧拉筛的基本操作

P3383 #include<bits/stdc++.h> using namespace std; const int maxn=1e8+5; bool d[maxn]={false}; int pri[100005],len=0,n,t,x; void ols(){ for(int i=2;i<=n;i++){ if(!d[i])pri[++len]=i; for(int j=1;pri[j]*i<=n&&j<=len;j++){ d[p

2022-03-08 14:05:41 95

原创 tarjan缩点

#include<bits/stdc++.h> using namespace std; int now,y,n,m; const int maxn=1e3+5; struct node{ int num,v; }a[1005]; vector<int>u[1005]; int dfn[maxn],low[maxn],stacK[maxn*3],tim=0,top=0; bool vis[maxn]; void tarjan(int now){ dfn[now]=low[now.

2022-03-08 14:04:51 148

原创 平衡树(Treap)的基本操作

平衡树(Treap)的基本操作

2022-01-24 23:47:39 568

原创 线段树的基本操作

线段树的基本操作

2022-01-23 13:33:40 478

原创 最近公共祖先(LCA)

最近公共祖先(LCA)的求法

2022-01-23 13:04:12 356

空空如也

空空如也

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

TA关注的人

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