- 博客(125)
- 收藏
- 关注
原创 2-SAT练习题2 (优化建图)
为例,连边时只需要连向图中三个线段树节点即可(见图中红边),这样同样能间接连接到。最小值最大是多少,可以自然而然想到二分,我们二分出一个答案。3(1).可持久化线段树和变量节点相连的边(发射树)3(2).可持久化线段树和变量节点相连的边(接收树)不合适,对这一部分进行优化,在一个部分中,(0),可以想到转换为2-SAT问题。2(1).建立可持久化线段树的边(发射树)2(2).建立可持久化线段树的边(接受树)被选为关键点(1),那么该部分中其他节点。结合使用(第一行),可以解决集合。
2026-02-13 09:49:32
899
原创 2-SAT练习题1
家每家都有两种选择,选人(1)或选猫(0),不同家庭之间都有限制,但是限制的形式比较特殊,都是形如。每个人只有两种可能的身份,阴谋者(1)和后勤人员(0),考虑限制有哪些:如果。,我们想要在此基础上求出一组新的方案,在每组里面最多只会进行一个人员的改变即。个评委每个人对其中两道菜的种类有限制,典型的2-SAT问题,即找到一组。组矛盾,每个矛盾只涉及两个代表,典型的2-SAT问题,即找到一组。成立的,因为如果改变两个人,那就是把两个人认识的人放到。为阴谋者,他的冲突点即为后勤人员中和他不认识的人,如果。
2026-02-13 09:49:22
596
原创 2-SAT
有n个布尔变量(只有01两个取值),其中一些布尔变量之间有相互限制的关系;用所有n个变量组成序列,使其满足所有的限制关系;判断序列是否存在,这成为SAT(Satisfiability 的缩写)问题。如果每个限制关系只涉及两个变量,就是2-SAT问题。
2026-02-11 19:30:35
594
原创 树链剖分练习题 (2)
由于篮子里面只能装两条鱼,且阴阳鱼不能同时存在,也正因此只有5种状态:空(0),一只阴鱼(1),一只阳鱼(2),两只阴鱼(3),两只阳鱼(4),状态数量比较少,可以分别考虑。我当前所处的状态不同,那么在走完一段路径之后,我变为的状态也不同,且在这段路径上吃掉的鱼也不同,因此考虑在线段树上维护以下信息:suf[i][j]:suf[i][j]:suf[i][j]:当前状态为iii的情况下,从左往右(0)/从右往左(1)走完之后,状态变成了什么。sum[i][j]:sum[i][j]:sum[i][j]:当前
2026-02-11 19:30:26
676
原创 树链剖分练习题 (1)
这样一来,我们的问题都变成了维护链的信息,可以进行树链剖分,线段树维护。路径上的每一条重链,我们要按照顺序依次去合并(与之相对应的是区间求和,我们只需要考虑每一条链的贡献加起来即可;的相邻边都变成轻边,路径上的边变成重边,改变路径好说,显然可以树链剖分,线段树维护,但是相邻的要变成轻边的那些边并不是同链的,如何处理?越大的点会越早进行结算,因此可以考虑对点权进行从大到小的排序,再依次去考虑每个点对于所有祖先的贡献,同时更新。对答案的贡献,每个节点只会在他的祖先节点产生贡献,对祖先节点。有一个很明显的贪心,
2026-02-09 08:52:04
774
原创 ad-hoc (1)
如果符合以下情形,即存在没有交叠的子序列,那么我可以重新找两个子序列,第一个子序列包含了子序列。先从大到小进行排序,如果我能选择的几个子序列符合以下情形,即所有的数都在子序列。的子序列,使得每个子序列的极差都相等,等价于问能否是否能将其分成。不可能再存在其他情形,综上,原问题就等价于两个子序列。的基础上,通过增大左下角正方形的方式,可以推广出。的范围之内,那么我只需要把其他子序列的数塞到。的偶数,奇数异或奇数,结果同样是一个不小于。的子序列,使得每个子序列的极差都相等。
2026-02-09 08:51:52
624
原创 manacher算法
这样一来我们实际上考虑的只有以单个字符为回文中心的情形,只是如果这个字符为原先字符串的字符,那么它对应的是原先以单个字符为回文中心的情形;如果这个字符是‘#’,那么它对应的是原先以两个字符为回文中心的情形。如果我们想要求出一个字符串中,以所有位置为回文中心的字符串长度,对于传统做法来说,我们需要枚举所有位置为回文中心,然后做扩展,时间复杂度为。这个回文半径既可以包含回文中心,也可以不包括,本文以不包括为例。,显然是无法接受的,也正因此,诞生了manacher算法。为中心的回文串的限制,那么我们不能直接让。
2025-12-30 19:56:14
943
原创 kmp算法
经过分析,可以发现上图中黄色的部分是相等的,对于失配的红色位置,我们如果能够事先知道在它之前位置的模式串最长公共前后缀长度,我们就能直接移动模式串到对应位置了,因此我们移动直接让。在匹配过程中,如果出选了失配的情况,我们可以考虑让模式串向右滑动一段最短的距离,让模式串的前缀能够和主串匹配,这样就不需要枚举主串的每个位置了。我们有一个主和一个模式串,想要求出模式串在主串的哪些位置出现过,暴力的做法是枚举主串的每一个位置为开头,然后尝试匹配,时间复杂度为。匹配为止,或者无法继续跳的时候,就结束了。
2025-12-26 08:36:21
324
原创 5.6 树形DP
在树这种数据结构上做DP很常见:给定一棵树,要求以最小代价(或最大收益完成给定的操作。)在树上做DP显得非常自然,因为树本身有子结构性质,最有递归性。之前提到DP有两种实现方式:记忆化搜索和递推,树形DP一般是通过记忆化搜索来实现的。某大学有n个职员,编号为1n。他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数ri。
2025-12-26 08:36:00
920
原创 数学知识——博弈论
若一个游戏满足:1.由两名玩家交替行动2.在游戏进行的任意时刻,可以执行的合法行动与轮到哪位玩家无关3.不能行动的玩家判负则称该游戏为一个。则称该游戏为一个公平组合游戏。NIM博弈属于公平组合游戏,但城建的棋类游戏,比如围棋,就不是公平组合游戏。因为围棋交战双方分别只能落黑子和白子,胜负判定也比较复杂,不满足条件2和条件3。给定一个有向无环图,图中有一个唯一的起点,在起点放有一枚棋子。两名玩家交替把这枚棋子沿着有向边进行移动,每次可以移动一步,无法移动判负。这类游戏被称为。
2025-12-25 19:14:10
851
原创 数学知识——概率与数学期望
若随机变量X的取值有x1x2,…,一个随机事件可表示为XXi,其概率为PXXipi则称EX∑pixi为随机变量x的数学期望通俗地讲,数学期望是随机变量取值与概率的乘积之和。数学期望是线性函数,满足EaXbYa∗EXb∗EY该性质是我们能够对数学期望进行递推求解的基本依据。
2025-12-25 19:13:41
933
原创 数学知识——容斥原理
∣i1⋃nAi∣i1∑n∣Ai∣−1≤ij≤n∑∣Ai∩Aj∣1≤ij≤k≤n∑∣Ai∩Aj∩Ak∣−...−1n−1∣A1∩...∩An∣两个集合的容斥原理A∪BAB−A∩B三个集合的容斥原理A∪B∪CABC−A∩B−A∩C−B∩CA∩B∩CCn0。
2025-12-24 10:01:39
1326
原创 数学知识——高斯消元
前置知识:初等行(列)变换1.把某一行乘一个非0的数 (方程的两边同时乘上一个非0数不改变方程的解)2.交换某两行 (交换两个方程的位置)3.把某行的若干倍加到另一行上去 (把一个方程的若干倍加到另一个方程上去)算法步骤枚举每一列c,1.找到当前列绝对值最大的一行2.用初等行变换(2) 把这一行换到最上面(未确定阶梯型的行,并不是第一行)3.用初等行变换(1) 将该行的第一个数变成 1(其余所有的数字依次跟着变化)4.用初等行变换(3) 将下面所有行的当且列的值变成 0。
2025-12-24 10:01:19
867
原创 算法竞赛数学知识大全
质数定义:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数,这个数就是质数。时间复杂度O(n)O(\sqrt n)O(n)一个数 xxx 分解成两个数的乘积,则这两个数中,一定有一个数大于x\sqrt xx,一个数小于根号x\sqrt xx。所以,可以用 xxx 除以 2~x2 ~\sqrt x2~x 中的每个数,如果出现了余数为 0,则这个数不是质数,如果没有出现余数为 0,则这个数是质数。分解质因数时间复杂度O(n)O(\sq
2025-12-23 18:49:29
1440
原创 数学知识——组合计数
从n个不同的元素中取出m个元素组成一列,产生的不同排列的数量。怎么得来的?先选一个元素,选法为nnn,选第二个元素,选法为n−1n-1n−1,以此类推,选第mmm个元素,选法为n−m+1n-m+ 1n−m+1,相乘即为Anm=n!(n−m)!A_n^m=\frac{n!}{(n-m)!}Anm=(n−m)!n!。从n个不同的元素中取出m个组成一个集合(不考虑顺序),产生不同集合数量。根据数据范围不同,求组合数有四种方法。给定 nnn 组询问,每组询问给定两个整数 a,ba,ba,b,请你输出 Cba
2025-04-11 11:34:49
1378
原创 数学知识——同余
线性同余方程对于一组a,b,ma,b,ma,b,m,我们想要求出一个xxx,使得ax≡b(mod m)ax≡b(mod\ m)ax≡b(mod m)。ax≡b(mod m)ax≡b(mod\ m)ax≡b(mod m)ax=km+bax=km+bax=km+bax−km=bax-km=bax−km=b令k′=−kk^{'}=-kk′=−kax+k′m=bax+k^{'}m=bax+k′m=b如果bbb不是(a,m)(a,m)(a,m)的倍数,那么一定无解,因为ax+k′max+k^{'}max
2025-04-11 11:34:20
1191
原创 数学知识——矩阵乘法
对于一个递推问题,如递推式的每一项系数都为常数,我们可以使用矩阵快速幂来对算法进行优化。FnF1×An−1由于递推式的每一项系数都为常数,因此对于每一步的递推,A里面都是相同的常数。对于An−1部分使用快速幂求解,根据Fn就能得到最终答案。
2025-04-09 23:10:28
743
原创 数学知识——快速幂
BSNY 在学等差数列和等比数列,当已知前三项时,就可以知道是等差数列还是等比数列。现在给你 整数 序列的前三项,这个序列要么是等差序列,要么是等比序列,你能求出第。如果正向求的话有困难,考虑先求出总情况数,再减去不可能越狱的状态数。因为每一个整数都可以唯一表示为若干指数不重复的2的次幂的和,对于。如果相邻房间的犯人信仰的宗教相同,就可能发生越狱。可能越狱的状态数,对 100003取余。项的值太大,对其取模 200907。种宗教,每个犯人可能信仰其中一种。个房间,每个房间关押一个犯人。
2025-04-08 10:21:07
765
原创 数学知识——分解质因数
内的每一个数分解质因数,再把对应质因数的次方数加起来就是。分解质因数,按照算术基本定理的形式输出分解结果中的。的质因数最多有一个,也正因此我们可以只考虑。分解质因数后的结果,共若干行,每行一对。按照 pi 从小到大的顺序输出。分解质因数的结果中所对应的次方数为。范围内的质数,对于每一个质数。分解质因数之后,大于。的数,最后再做特判。一个直观的想法是对于。
2025-04-07 14:00:01
558
原创 数学知识——筛质数
质数定义:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数,这个数就是质数。华生挑战夏洛克,让他给这些珠宝染色,使得一件珠宝的价格是另一件珠宝的价格的质因子时,两件珠宝的颜色不同。因为一个合数的倍数一定为一些质数的倍数,所以在这里我们只考虑了去枚举质数的倍数,避免了一定的重复。中的每个数,如果出现了余数为 0,则这个数不是质数,如果没有出现余数为 0,则这个数是质数。是最小的),如果存在相同距离的其他相邻质数对,则输出第一对。
2025-04-07 13:59:39
1494
原创 算法竞赛——图论知识全家桶
单源最短路径问题(Single Source ShortestPath,SSSP问题)是说,给定一张有向图GVEV是点集,E是边集,∣V∣n∣E∣m,节点以1n之间的连续整数编号,xyz描述一条从x出发,到达y,长度为z的有向边。设1号点为起点,求长度为n的数组dist,其中disti表示从起点1到节点i的最短路径的长度。
2025-03-15 13:32:52
1770
原创 图论——二分图
如果一张无向图的N个节点N≥2可以分成AB两个非空集合,其中A∩B∅,并且在同一集合内的点都没有边相连,那么成这张无向图为一张二分图。
2025-03-15 13:22:02
954
原创 图论——拓扑排序
对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边uv>∈EG,则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。
2025-03-14 17:12:08
933
原创 图论——无向图的双连通分量
给定无向图GVE若对于x∈V,从图中删去节点x以及所有与x关联的边后,G分裂成两个不连通的子图,则称x是G的。若对于e∈E,从图中删去边e之后,G分裂成两个不相连的子图,则称e为G的桥或。无向边xy是桥,当且仅当搜索树上存在x的一个子节点ydfnxlowy在无向图中不存在横插边,所以说如果满足以上条件,要么说明以y为根的子树只存在树边,要么说明下图中存在类似于红色这样的后向边,即无法通过其他路径到达x或以上的部分,即把xy。
2025-03-11 14:01:59
955
原创 图论——欧拉回路和欧拉路径
给定一张无向图,若存在一条从节点S到节点T的路径,恰好不重不漏地经过每条边一次(可以重复经过图中的节点),则称该路径为S到T的欧拉路。特别地,若存在一条从节点S出发地路径,恰好不重不漏地经过每条边一次(可以重复经过图中的节点),最终回到起点S,则称该路径为欧拉回路,存在欧拉回路的无向图被称为欧拉图。一、无向图1 存在欧拉路径的充要条件 : 度数为奇数的点只能有0或2个2 存在欧拉回路的充要条件 : 度数为奇数的点只能有0个二、有向图。
2025-03-11 14:01:47
2053
原创 图论——有向图的强连通分量
对于分量中任意两点u,v 必然可以从u走到v 且从v走到u:极大连通分量有向图的强连通分量无非是以下两种情况:1.绿色:存在后向边指向祖先结点2.红色:存在横插边指向的点有指向这两个点公共祖先节点从实际应用的角度来说,我们在求完强连通分量之后会进行缩点的操作。缩点之后,该图就变成了有向无环图(拓扑图)了,这样处理起来就会很方便。
2025-03-10 19:47:59
1251
原创 图论——差分约束
差分约束是一类特殊的不等式约束问题,其形式为xi≤xjc,其中xixj为变量,c为常数。这类问题可以通过转换为单源最短路问题来求解其可行解。我们证明一个差分约束和一个最短路问题是等价的:1.假设我们已经通过最短路算法求出了一个图中从源点s到所有节点的最短路径disti,根据最短路的松弛性质,对于任意一条边j→iw,都有disti≤distjw,因此,最短路的解满足所有的边权约束条件。
2025-03-10 19:47:47
1557
原创 图论——spfa判负环
图G中存在一个回路,该回路边权之和为负数,称之为负环。:统计每个点入队次数, 如果某个点入队n次, 说明存在负环。证明:一个点入队n次,即被更新了n次。一个点每次被更新时所对应最短路的边数一定是递增的,也正因此该点被更新n次那么该点对应的的最短路长度一定大于等于n,即路径上点的个数至少为n+1。根据抽屉原理,路径中至少有一个顶点出现两次, 也就是路径中存在环路。而算法保证只有距离减少才会更新, 所以环路权值之和为负数。:统计从起点到任意顶点最短路经过的边数, 若某点对应边数cnt≥n。
2025-01-30 19:43:59
1612
原创 图论——floyd算法
为了求出图中任意两点间的最短路径,当然可以把每个点作为起点,求解N 次单源最短路径问题。不过,在任意两点间最短路问题中,图一般比较稠密。使用floyd算法可以在ON3的时间内完成求解,并且程序实现非常简单。设Dkij表示“经过若干个编号不超过k的节点”从i到j的最短路长度。该问题可划分为两个子问题,经过编号不超过k-1的节点从i到j或者从i先到k再到j。于是DkijminDk−1ijDk−1ikDk−1kj。可以看到,Floy。
2025-01-30 19:43:39
937
原创 图论——最小生成树的扩展应用
我们考虑kruskal算法,kruskal算法是从大到小枚举每个边,如果该边两端不连通则加入该边,当我们当前枚举的边权为d时,虽然实际上我们只是在小于等于d的边权中选择将能够实现联通的边加入了最小生成树生成了若干连通块,然而实际上这和把边权小于等于d的边全部连起来形成连通块的情况是相同的,也正因此我们上面这个问题和kruskal算法实际上是等价的,我们可以用kruskal算法来做。值越大的型号价格越贵。不过,他并不想让他的竞争对手知道他具体的运输方案,所以他希望采用费用第二小的运输方案而不是最小的。
2025-01-29 17:13:00
1690
1
原创 图论——最小生成树
给定一个无向图,在图中选择若干条边把图的所有节点连起来。要求边长之和最小。在图论中,叫做求最小生成树。prim 算法采用的是一种贪心的策略。每次将离连通部分的最近的点和点对应的边加入的连通部分,连通部分逐渐扩大,最后将整个图连通起来,并且边长之和最小。prim算法的贪心策略为什么是正确的?当我们循环到某一部中,当前的连通块为图中绿色虚线内部分,离连通部分的最近的点和点对应的边如下图所示。
2025-01-29 17:11:46
1634
原创 图论——单源最短路的扩展应用
有一天,琪琪想乘坐公交车去拜访她的一位朋友。由于琪琪非常容易晕车,所以她想尽快到达朋友家。现在给定你一张城市交通路线图,上面包含城市的公交站台以及公交线路的具体分布。已知城市中共包含nnn个车站(编号1~n1~n1~n)以及mmm条公交线路。每条公交线路都是 单向的,从一个车站出发直接到达另一个车站,两个车站之间可能存在多条公交线路。琪琪的朋友住在sss号车站附近。琪琪可以在任何车站选择换乘其它公共汽车。请找出琪琪到达她的朋友家(附近的公交车站)需要花费的最少时间。输入格式输入包含多组测试数据。每组测试数
2025-01-28 17:11:45
1621
原创 图论——单源最短路的综合应用
我们把边权大于x的边权置为1,小于等于x的边权置为0,这样一来图就是一个只有0,1边权的图,我们可以求出一条从1到n的最短路径,如果路径长度。阿龙通过这样的贸易方式赚取旅费:他会选择一个经过的城市买入他最喜欢的商品――水晶球,并在之后经过的另一个城市卖出这个水晶球,用赚取的差价当做旅费。怎样走,才需要最少的时间?2.对于答案右边的区间,x变大了,大于x的边数就会减小,即大于x的边数小于k,同样满足性质;2.对于答案左边的区间,x变小了,大于x的边数就会增加,即大于x的边数大于k,不满足性质。
2025-01-28 17:11:37
949
原创 图论——单源点最短路径建图方式
单源最短路径问题(Single Source ShortestPath,SSSP问题)是说,给定一张有向图GVEV是点集,E是边集,∣V∣n∣E∣m,节点以1n之间的连续整数编号,xyz描述一条从x出发,到达y,长度为z的有向边。设1号点为起点,求长度为n的数组dist,其中disti表示从起点1到节点i的最短路径的长度。
2025-01-27 20:37:43
1200
原创 动态规划——斜率优化DP
单调递增的了,上一题中,对于凸包的头部和尾部均使用单调队列来处理,本题则需要使用二分去找到合适的点对,对尾部的处理同样使用单调队列。进行一个从小打到的排序。这样一来,相邻一段猫肯定是要由一个饲养员接走的,饲养员的出发时间就是这一段最后一只猫对应的数组。大于队头两个点的斜率时,那么一开始的点就可以彻底删除,在以后也不会用到,所以凸包中的点可以用单调队列来维护。和上一题不同的是, 本题中机器的工作时间可以为负数,也正因此斜率。是单调递增的,也就是说,如果当前的斜率。2.插入的时候,把不在凸包上的点删掉。
2025-01-27 20:37:09
1640
原创 学习笔记——动态规划
递推问题包括动态规划,动态规划一定是递推,递推不一定是动态规划。动态规划是一种决策性的问题,是在状态中做最优决策的一种特殊递推算法,通常的问法包括求最大最小值等,而递推可能还会包括求种类数等问题。递推是一种算法,用来解决一类特殊的问题,而递归是程序实现的形式,不属于算法范畴。1.状态定义(核心环节,f[i][j]:f[i][j]:f[i][j]:符号表达式以及对这个表达式的文字定义)2.确定递推公式(形如dp[i][j]=dp[i−1][j]+dp[i][j−1]dp [ i ][ j ]=dp [ i
2025-01-22 20:49:01
1425
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅