自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 差分约束(spfa)

【代码】差分约束(spfa)

2023-06-09 20:48:30 333

原创 可达性统计(在有向图中,统计每个点能够到达多少个点)拓扑排序

先求拓扑序,利用拓扑序倒叙,因为拓扑序倒叙才能保证正确的顺序性,比如u—>v,我们一定先求出v能够到达哪些点,然后用v到达点的数量更新u,这也就是利用拓扑序倒叙就可以做到。我们在统计哪些边相连同时,利用bitset数据结构即可存储哪些存在边,更新时只需要f[v]|=f[u]即可更新。bitset数据结构,存放二进制数,比如001011,此类数据。

2023-06-04 21:57:59 476

原创 动态中位数(对顶堆)

维护两个性质:1、小根堆元素>=大根堆元素2、大根堆元素个数比小根堆元素个数多1。上面是一个小根堆,下面是一个大根堆。结果出堆大根堆top即可。

2023-06-04 17:33:42 459

原创 位运算应用

将b拆解为2进制形式,复杂度变为log级别。

2023-06-02 22:18:16 242

原创 隔板问题(状态机dp)

i>k+1时,第i个位置可以是0,也可以是1,当是0时,那么f(i)=f(i-1),如果是1时,f(i)=f(i-k-1)继承过来,所以f(i)=f(i-1)+f(i-k-1)前k+1个位置,每个位置f(i)=i+1,枚举1放的位置,或者全部是0。

2023-06-02 19:54:10 158

原创 约数相关习题

直接求每个数的约数难求,因为涉及质因数分解,然后利用性质,非常麻烦,但是求每个数的倍数好求,所以我们枚举i求出有多少数字是i的倍数即可。

2023-06-02 18:05:55 177

原创 阶乘分解(质数筛+枚举质数)

这道题,我们没办法求出N!,因为N范围是1e6,1e6的阶乘太大了,肯定超long long,所以我们调整枚举顺序,不去枚举N!中每个数进行质数分解,我们先求出N范围内的所有质数,然后枚举每一个质数,在N阶乘中的幂,关键在于这个在N阶乘中幂怎么求出来。

2023-06-02 15:50:06 247

原创 质数距离(筛法)

直接用筛法无法求到1e9以内的质数,但是题目问的区间范围不超过1e6,所以我们求出sqrt(1e9)以内的质数,然后根据倍数关系,筛掉区间内的合数。(2):当m不可以整除n时,s=m%n>=1,(m+n-1)/n=k+(s+n-1)/n>=k+1。(1):当m可以整除n时,s=m%n=0,(m+n-1)/n=k+(s+n-1)/n=k。注意:上取整,数学中可以写为 (m+n-1)/n。,最后存放到数组里,遍历一遍即可得出答案。(k=m/n后的正整数)

2023-06-02 00:42:33 168

原创 Acwing刷题day6.1

数学居多

2023-06-01 13:49:31 177

原创 进制(位运算)

既然枚举a~b有多少个0无法实现,那么逆向思维,枚举出一个0在那些位置,1e18近似2的60次幂,那么我们枚举0在60位数上第几位即可,枚举该0左侧有多少个1,右边有多少个1即可。

2023-05-27 23:24:18 143

原创 单词环(0/1整数规划)

我们取每个单词的前两个字母,以及后两个字母为节点,单词的长度为边,那么我们可以将规模缩小到,26*26个点,1e5条边这个复杂度小很多。这道题主要是建图困难,如果我们直接建图,那么有1e5个点,1e10条边,肯定超时。

2023-05-27 21:49:40 163

原创 观光奶牛(01规划+负环+二分)

这类问题首先要写出表达式,然后将表达式整理位加减法一端>=0或者<=0,此类形式,然后转为图论问题,对图的边权进行调整,最后转为最短路、最小生成树、负环等问题。求正环那么求最长路,让d一直增加,最后最长路边数最终会大于等于n,即可找到正环。

2023-05-25 23:18:17 165

原创 虫洞(spfa求负环)

在松弛操作的时候,用一个cnt数组记录最短路边数,如果大于等于0那么一定存在负环,就是因为负环才一直迭代下去,导致最短路长度大于等于n。这道题,出发点任意,那么只要找到一个负环,肯定可以穿越回出发点之前的某一时刻,也就是在负环上作为出发点即可。判断条件:最短路边数绝对不可能大于等于n!s负环:环的权值和小于等于0。

2023-05-25 21:38:20 126

原创 走廊泼水节(kruskal+连通块中点的数量)

开辟一个s数组维护连同块中点的数量,合并两个连通块,最后新增的边的权值和等于 (size(u) * size(v)-1) * (w+1),减去1是因为自身已经连同不需要加边。每次新边的权值,一定是当前枚举出的边的权值加上1,不然会破坏原最小生成树。

2023-05-25 15:23:49 140

原创 新的开始(最小生成树+超级源点)

我们建立一个超级源点,每个点都与超级源点相连,他们的权值为在该点建立发电站的费用,剩下的将其余点相连,权值为连接到已经通电的发电站费用,我们跑一遍最小生成树即可将他们全部相连,并且费用最小。

2023-05-25 12:00:45 187

原创 AcWing连接格点(坐标转为编号,并查集维护)

【代码】AcWing连接格点(坐标转为编号,并查集维护)

2023-05-19 16:52:53 143

原创 合适的环(图中度的应用)

我们可以利用一个g数组记录那两个点之间有边,然后枚举第三个点,用一个d数组记录每个点的度,最后求出一个环所连的边的点最少,只需要cnt=d[a]+d[b]+d[c]-6计算即可。根据复杂度无法枚举3个点,所以可以枚举边,变为O(N*M)的复杂度可以通过。

2023-05-19 11:12:34 142

原创 联络员(最小生成树Kruskal给出固定的边选剩余的边)

对于已经给出的某些固定的边直接算在里面即可,因为有并查集维护。

2023-05-18 21:09:54 205

原创 无向图最小环(floyed解决)

按照集合划分,每次枚举的环最大编号为K,那么这个环是 i到k,k到j,j到i这样一个环,每次算出这个环的长度,递归记录路径即可。Floyd本质也是所有点的枚举一遍通过中间点更新到其他点的距离。总的来说就是把所有的环枚举一遍,比大小。

2023-05-18 19:56:31 191

原创 排序(Floyd解决传递包庇)

d(i,j)含义为i<j,那么根据Floyd特点每次利用一个中间点更新其他值,那么比如 i<k,k<j推出i<j ,根据这个特点更新。每次读入一对关系,然后跑一边Floyd,再去判断一下是否矛盾,有未确定的关系。

2023-05-18 16:16:02 188

原创 牛的旅行(多源最短路floyed)

也就是i号点所在连同块的最短路最大值,j号点所在连通块最短路最大值,以及i号点和j号点之间的距离。那么有了这个公式那么就迎刃而解了!这道题就是求一个Floyd求出没有加边连通各个连通块之前直径最小,以及加边后连同块直径最小,将两者取max。关键在于加边后如果求直径最小,比如i和j之前不连通,那么在i和j加边后,他们相关的路径最短路最大值应该为。先介绍一个多源最短路中的数组,maxd[i] 这个数组可以求出任意i到达所能够到达的点的最短路的最大值。

2023-05-18 14:16:51 101

原创 最短路个数与次短路个数问题

比如这个图,spfa先沿着路线1更新到终点,终点b的最短路径为1,a的最短路径数也为1,然后spfa会沿着路线2更新,那么更新后a的最短路路径数位2,但是此时终点的最短路径数会加上a的最短路径数,那么b的最短路径数位3,显然是不对的。利用一个数组d[i][1] d[i][0] d(i,1)表示i号点的次短路个数,d(i,0)表示i号点的最短路次数。dijkstra是具备拓扑序更新这个特点,因为优先队列保证了每次一个点出队后,他不会在次出队,这样就形成拓扑序。首先spfa不具备拓扑序,他会重复更新。

2023-05-12 22:06:51 89

原创 拯救大兵瑞恩AcWing(bfs最短路+坐标编号化+dp状态转移)

分析dp部分:这道题对最短路中d数组进行变化,将它的含义变为编号z它目前拥有钥匙数为s,s是一个二进制数eg s=1010即z编号位置拥有钥匙1和钥匙3,那么我们跑一遍bfs先达n*m终点编号的一定是最短路。对于移动的处理,首先遇见墙肯定不能走,遇见门,我们要用手里的钥匙去匹配也就是((s>>x)&1)==1,门的类型为x,如果等于1那么有这把钥匙,如果等于0那么没有这把钥匙,有这把钥匙正常通过,没有这把钥匙不能通过,其他的与bfs最短路问题没有任何差别。首先要学会横纵坐标转编号。

2023-05-12 17:55:11 136

原创 最佳路线AcWing(单源最短路+反向建图)

我们的出发点有许多个,但是终点只有一个,所以我们可以反向建图,化终点为起点,起点为终点,求最短路。

2023-05-11 17:50:37 107

原创 道路与航线(单源最短路+拓扑排序中最短路)

如果是一个有向无环图,那么这个图的最短路一定是拓扑序出的最短路,如果一个点入度不为0,那么最短路能去更新他的点一定是与他相连指向它的点,在这个点出队前,那么它的入度点一定都更新过它,所以它一定是最小值。

2023-05-11 15:26:22 106

原创 通信线路(分层图)

分层图模板,在判断条件进行更改即可,因为要求。,所以每次转移最大边即可。

2023-05-09 20:30:29 98

原创 新年好(单源最短路+全排列枚举方案)

仔细看题目发现需要访问的点一共只有5个,那么即使做5遍最短路复杂度也不超时!做五遍最短路后得出每个亲戚到不同亲戚间的最短距离。这道题的拜访顺序是不固定的,也就是我们要在不同的拜访顺序中找到最小的那一条路线。我们可以全排列出不同的路线,最后按照一个顺序求出每个路线的距离,最后求最小即可。

2023-05-09 19:46:51 86

原创 昂贵的聘礼(超级源点+更新限制)

根据1号点的等级,以及题目给出的等级范围m,那么最大间是(level[1]-m,level[1]+m)这个区间直接带入肯定是不合法的,因为level[1]-m不可以和level[1]+m等级的人交易,所以要枚举合法区间从最低的level[1]-m开始一直枚举到level[1] 这个是最低等级,最高等级就是level[1]到level[1]+m。这道题还是建图比较难想出来,首先要明确不论怎么买卖最后终点一定是1号点。跑一边spfa/dij就可以得出到达1号点的最小值。

2023-05-09 16:48:45 71

原创 最优乘车(单源最短路+构图)

题目中给出大巴路线,那我们就可以知道一个点可以可以直接到达哪些点,我们直接构建一条边在两点之间即可。比如 大巴路线为4 7 3 6 那么我们在建图时创建 4–>7 4–>3 4—>6 7–>3 7–>6 3–>6这样我们跑一遍最短路可以得出乘坐了几台不同编号的公交车,最后结果减去1就是答案。这道题我们在构图上进行改变,从而简化题目,跑一遍单源最短路就可以得到结果。题目询问换乘次数,也就是乘几台不同编号的大巴数量减1。

2023-05-09 13:23:02 281

原创 最小花费AcWing(最短路判断条件改变)

这也就是使这个式子中w1 * w2 * w3 * …* wn最大那么在判断的时候更改判断条件即可。最终花费变为100,求初始值X最小,100=X * w1 * w2 * …

2023-05-09 12:02:02 93

原创 送礼AcWing(双向dfs)

双向dfs,实际上就是两次dfs,根据这道题的规模,重量为2的31次幂想要做01背包肯定超时,但是这道题n的范围非常小所以利用dfs做,但是单纯的dfs规模也要有46的46次幂,我们将其分为两次dfs第一次dfs枚举前23种组合出的重量存到一个数组中记录下来,后23种在进行dfs,配合前面的数组得出最终的答案。优化:我们在第二次dfs时要记录答案,我们要在前面的重量数组中找到一个合适的重量,然后使得这次深搜的结果加上当前重量小于等于最大值W,我们此时可以利用二分去寻找。

2023-05-06 20:26:25 96

原创 加成序列(迭代加深)

一直向下搜会造成dfs深度过于离谱,导致超时,如果对深度进行控制,那么他的答案很可能就在深度比较浅的位置。剪枝优化:每次在枚举xi+xj可能重复,所以利用一个vis数组进行去重,减少搜索次数。题目分析:x序列依次递增,xi=xj+xk ,x1=1,xm=n。这种就会造成超时,深度过深才能得到结果(沿着虚线dfs)

2023-05-06 16:05:47 86

原创 木棒AcWing167(DFS+剪枝)

仔细想一想dfs特点,比如棋盘问题,当从某个点向下dfs时这个点肯定会把所有的结果返回,如果这个点得不到想要的结果,那么你从其他点在经过这个点在继续搜,肯定结果都是相同的。首先对搜索顺序进行优化,想一想,我们在拼凑一根完整的木棒时,先放一根大的木棒在搭配几根小的木棒,这样dfs去搜的方案数少还是先放几根小木棒所搜得的方案少呢?答案肯定是先放大的木棒搜得的方案少,因为当我确定一个大的长度后,后面搭配的余量就比较少,能选择的方案也少。如果当前木棒放在开头返回结果失败,那么这个枚举的length肯定失败。

2023-05-06 13:58:29 180 1

原创 分成互质组(DFS搜索顺序)

这个顺序选择为,每次一个数要么加入之前的组,要么新成立一个组,按照这个顺序就可以得出每个数位于不同的组,不同组合,利用ans记录最小就可以得出答案。我们要确定一个搜索顺序,这个搜索顺序要将所有的数归类,归为不同的互质组里。

2023-05-05 15:43:43 94

原创 DFS搜索顺序

我们可以记录一个cnt变量表示已经遍历了点的个数,如果cnt==n*m那么表示所有点都已经遍历过了可以结束遍历。询问马走完全局有多少可行方案,那么也就dfs搜索形成的搜索树有多少分支可行。因为我每个分支判断完我仍然需要继续判断下一个分支所以需要回溯。利用一个g二维数组预处理一下两个字符串之间能否拼接。那么搜索终点判断条件是什么呢?

2023-05-05 12:35:01 84

原创 迷宫ACWing(dfs不需要回溯)

dfs不需要回溯,因为你搜过了证明这个方向是否可行结果就的出来了,那么你回溯的话会造成一直死在里面不出来,一直打圈在里面。

2023-05-05 09:38:39 194

原创 ACWing最长连续子序列(自己分析性质+双指针)

分析性质:连续两个数字绝对值小于等于1,并且序列中最大最小值差为1,那么也就是这个序列只有两个连续的数字,只存在两种数字,这两个数字差为1。利用双指针,j记录j到i的合法区间,每次判断区间内数字种类个数是否大于2,如果大于2那么cnt[j]–,知道将区间元素种类个数控制在2以内。

2023-05-01 23:54:07 79

原创 ACWing栈(哈希表)

从后向前输出,如果输出过了就不要输出了。

2023-05-01 23:16:19 102

原创 砝码称重(进制展开)

然后(m-a0)/n 得出m1=a1+a2。m每次取余n 那么m%n=a0。n99以此类推得出a1。依次类推得出a100。

2023-04-28 00:47:57 95

原创 凑数(二进制+逆向思维)

首先如果n为偶数,那么n除以等于2,这样的一次操作不需要代价,如果n为奇数那么n需要减等于1,这样需要代价为1以此类推可以得出最终的代价。我们不要正向去凑出来n,而是逆向将n分解为0。

2023-04-27 23:54:57 504

空空如也

空空如也

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

TA关注的人

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