- 博客(54)
- 收藏
- 关注
原创 【网络流】——初识(最大流)
通俗地讲,回到引例,现在有一个问题需要我们去解决:水厂在单位时间内最多能发送多少水给小区?这就是网络流中的一个问题:最大流问题。
2024-07-25 09:22:53
783
原创 【题解】UVA1564/SP2883 Widget Factory
组方程,所以判无数组解时判完未知数即可,而判无解时要判全部方程。如果不是在模意义下进行,这就是个裸的高斯消元。个方程,我们只用判断最右边那一列是否为。那求一下逆元即可,注意答案有范围。再说一下无解和无数组解的情况。
2024-07-24 15:00:00
1599
原创 【题解】P4003 无限之环
考虑拆点,将每一个点拆成上,下,左,右,中五个点,中点连向源点或汇点,其余四个点和异种颜色的这四类点匹配。然后看看这个图有什么用,考虑将源点连向所有黑点,所有白点连向汇点,然后直接跑最小费用最大流,如果。蓝边第一个数为流量,第二个数为费用,这样我们就可以模拟旋转操作了。点贡献,所以总贡献因为接口总数的一半,否则就有接口匹配不上,就漏水了。再深入一点,我们用红边限制流量,用蓝边模拟旋转。条边,且费用为什么为那些数,最好模拟一下。接口数,那么解即为最小费用,否则无解。,这是这个水管的基本数据。
2024-07-24 10:26:35
705
原创 【数据结构】Splay详解
二叉树的性质使得插入操作变得非常简易,具体而言,只要值比当前节点大,就往右子树找,小就往左子树找,一样就让计数器+1,如果找不到匹配的值就直接新建一个节点。这个跟插入差不多,从根节点不断往下找,每次向右子树找时加上左子树的size+1,因为左子树和根的值一定比查询值小(BST的性质)。本文将介绍Splay,虽然它并不能保证树一直是"平衡"的,但对于Splay的一系列操作,我们可以证明其每步操作的平摊复杂度都是。的后继旋转到根节点的右子树上,这样根节点的右子树的左儿子即为目标节点,直接断开联系即为删除。
2024-07-15 16:02:10
972
原创 【数学笔记】一元n次不等式,分式不等式,绝对值不等式
这个采取分类讨论,类比一下。稍微理解一下,结合二次函数。的大小关系式,并使用。口诀为“奇穿偶不穿”。然后就跟上面一样了。
2024-01-25 21:15:58
775
原创 【数学笔记】集合及简要逻辑
ABC......abc......{a是A中的元素:a属于A,记为a∈Ab不是A中的元素:b不属于A,记为b∈A}(1)确定性(2)互异性(3)无序性∅(1)N(2)Z(3)Q(4)R(5)N或N∗(6)C列举法11102357500123⋯500123⋯2⎩⎨⎧数集点集⋯有限集无限集注意⋯∅∅3(特殊性质描述法AIpx)AAx∈I∣。
2024-01-19 08:54:39
1139
原创 【题解】洛谷 CF11D A Simple Task
求无向图中的简单环个数,保证不存在重边和自环。简单环:除起点外,其余的点都只出现一次的回路。就为起点,那就是找到环了,直接统计即可。个节点走过的状态,起点为。
2023-11-29 13:51:09
984
原创 【题解】P2622 关灯问题II
现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。一个整数,表示最少按按钮次数。的话,如果这盏灯是关的,那么把它打开,否则也不管;,那么当这盏灯开了的时候,把它关上,否则不管;然后暴力枚举当前状态按下第几个开关后的状态。个按钮,对于所有的灯都有一个效果。的大小并不确定,无法保证DP条件中的。考虑用宽搜,存的状态为当前灯的状态。其中,按下每个开关,对于其对第。,无论这灯是否开,都不管。,那按完后这个灯一定关着。,那按完后这个灯一定开着。串来表示灯的开关状态,
2023-11-29 13:08:35
2076
原创 【题解】P2627 [USACO11OPEN] Mowing the Lawn G 题解
在一年前赢得了小镇的最佳草坪比赛后,Farmer John 变得很懒,再也没有修剪过草坪。现在,新一轮的最佳草坪比赛又开始了,Farmer John 希望能够再次夺冠。只连续的奶牛,那么,这些奶牛就会罢工去开派对 😃。因此,现在 Farmer John 需要你的帮助,计算 FJ 可以得到的最大效率,并且该方案中没有连续的超过。然而,Farmer John 的草坪非常脏乱,因此,Farmer John 只能够让他的奶牛来完成这项工作。第一行:一个值,表示 Farmer John 可以得到的最大的效率值。
2023-11-28 13:28:16
978
原创 【算法】状压DP-2
状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要求使用状态压缩的对象的点的状态必须只有两种,0 或 1;当然如果有三种状态用三进制来表示也未尝不可。状态压缩DP:顾名思义,就是用状态压缩实现DP。不过呢,对于装压DP来说,不一定是二进制。状压DP主要分为集合式和棋盘式,本文只讨论棋盘式。集合式点这里。对于棋盘式的状压DP,有几种思考方式。每行每行考虑,逆推DP。每列每列考虑,逆推DP。
2023-11-28 13:03:13
396
原创 【题解】洛谷 P2704 [NOI2001] 炮兵阵地
现在,将军们规划如何部署炮兵部队,在防止误伤的前提下(保证任何两支炮兵部队之间不能互相攻击,即任何一支炮兵部队都不在其他支炮兵部队的攻击范围内),在整个地图区域内最多能够摆放多少我军的炮兵部队。如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格。从图上可见炮兵的攻击范围不受地形的影响。由于每一行都受上两行的状态的影响,所以我们需要开三维数组。一行一个整数,表示最多能摆放的炮兵部队的数量。的网格地图上部署他们的炮兵部队。
2023-11-27 14:07:12
2067
原创 【算法】状压DP-1
状态压缩就是使用某种方法,简明扼要地以最小代价来表示某种状态,通常是用一串01数字(二进制数)来表示各个点的状态。这就要求使用状态压缩的对象的点的状态必须只有两种,0 或 1;当然如果有三种状态用三进制来表示也未尝不可。状态压缩DP:顾名思义,就是用状态压缩实现DP状压DP主要分为集合式和棋盘式,本文只讨论集合式。
2023-11-27 13:33:51
983
原创 【题解】洛谷 P1433 吃奶酪
一只小老鼠要把它们都吃掉,问至少要跑多少距离?处理完这些之后,就是裸的状压DP了,直接套模板即可。考虑状压DP,定义状态。点,走过的点的状态为。,然后枚举由哪个节点。两点之间的距离公式为。
2023-11-25 11:13:12
996
原创 【题解】洛谷 CF788B Weird journey
而对于删除的第二条边,如果是非自环,那么图就有两个积点,存在欧拉路径,如果是自环,那么图所有点为偶点,存在欧拉回路。否则我们在分析:由于我们是将每条边当作两条边的,那么对于建的图来说,每个顶点的度数为偶数,及一定存在欧拉路。条路径仅走一遍,问不同的路径总数有多少,如果仅走一遍的两条边不同则将这两条路径视为不同。如果删除了一个自环,那剩下的所有点的度数仍然为偶数,所以可以随意删除下一条边。如果删除两条非自环,如果可行,那么它们一定共顶点,只有这样才会使共顶点的度数。,为积点,存在欧拉路径。
2023-11-25 08:43:54
1102
原创 【算法】FFT-1(递归实现)(不包括IFFT)
个数就可以了,问题缩小了一半,而缩小后还能继续缩小,所以我们用类似线段树的分治(递归)来解决它,时间复杂度。但是光有点值还是不够的,我们还要转换为数值,这就是 IFFT。没错,只有后面一坨是相反的,这说明我们可以。高中课本里讲过复数,不过不知道也没关系,这里会讲。但是,当我们把这个多项式看成一个函数时,我们将。接上文复数的知识,每个单位根在复平面上的坐标为。次单位根的每一个根,及方程的每一个解。的每一项相乘,最后累计,时间复杂度。个点的坐标,它们确定唯一的多项式。复数的运算其实跟实数的运算差不多。
2023-11-24 13:25:40
2338
原创 【题解】洛谷P6423 [COCI2008-2009#2] SVADA
肯定是二分了,于是我们在考虑怎么计算生产和开的椰子数。只第一种猴子的两个相关数据,具体解释请参照题目描述。只第二种猴子的两个相关数据,具体解释请参照题目描述。生产的椰子个数很容易得出为每个猴子生产的椰子个数总和。秒的椰子,找出一个分界点,使得分界点前生产的椰子。,表示猴子在花园中度过的总时间,以秒为单位。题目说的有点绕,但读懂题意后还是很简单的。只猴子能开椰子,一共生产/开了。最终看 cnt 是否大于。,表示第一种猴子的只数。,表示第二种猴子的只数。只猴子能生产椰子,有。
2023-11-24 13:00:03
779
原创 【题解】洛谷P3443 [POI2006] LIS-The Postman 题解
最后还有一个小技巧,及我们如果合并了边,在最后输出时还有点儿麻烦,所以=我们可以加几个数组,让程序在求欧拉回路时如果碰到了指定序列(合并后)中的边,就只能遍历完序列的边,这样输出也方便。那么在我们就来考虑怎么将边合成了,如果直接按照每条序列合并的话,会发现可能存在几条序列刚好有公共部分从而卡掉我们的程序。所以我们先给每条边编上一个编号,在维护指向这条边的上一条边和这条边指向的下一条边,及前驱和后继。而维护起来也是很容易的,用 map 存边的编号,开个数组记录后继,再用循环不断合并边。
2023-11-23 13:33:59
200
原创 【算法】求割点和割边
无向图中所有能互通的点组成了一个连通分量。在一个连通分量中,如果删除某一个点,会把连通分量分为两个或更多,这种点称为割点。在一个连通分量中,如果删除某一条边,会把这个连通分量分成两个,那么这条边称为割边(桥)。通俗的讲,就是在无向图的一个连通块中,删除了一个点/一条边,这个连通块就不连通了,那么这个点/这条边就是割点/割边。
2023-09-23 13:38:00
609
原创 【题解】洛谷 P9584
个点两两之间距离求出来。这一步可以转换为求路径,及每条边经过的次数。个点到连接点的距离之和和新连接的边的经过次数。个点的距离之和可以转换为两个东西:剩下。个点两两之间距离之和也可以求出来。,我们发现,对于一个子节点。为根节点的子树有几个节点。后,对于每次的询问,可以。那么在第一次 dfs 中,在第二次 dfs 中而前。个点,我们发现其和前。
2023-08-27 07:58:49
48
原创 【算法】最大子矩阵——非悬线法
首先明确一些概念。1、定义有效子矩形为内部不包含任何障碍点且边界与坐标轴平行的子矩形。如图所示,第一个是有效子矩形(尽管边界上有障碍点),第二个不是有效子矩形(因为内部含有障碍点)。2、极大有效子矩形:一个有效子矩形,如果不存在包含它且比它大的有效子矩形,就称这个有效子矩形为极大有效子矩形。(为了叙述方便,以下称为极大子矩形)3、定义最大有效子矩形为所有有效子矩形中最大的一个(或多个)。以下简称为最大子矩形。【定理1】在一个有障碍点的矩形中的最大子矩形一定是一个极大子矩形。
2023-08-17 16:03:22
651
原创 【算法】最大子矩阵——悬线法
悬线法思路:悬线的定义,就是一条竖线,这条竖线要满足上端点在整个矩形上边界或者是一个障碍点。然后以这条悬线进行左右移动,直到移至障碍点或者是矩阵边界,进而确定这条悬线所在的极大矩阵。我们定义hijh[i][j]hij表示点ij(i,j)ij的悬线的长度。(及以点ij(i,j)ij,为边界的最大子矩阵的宽)lijl[i][j]lij表示点ij(i,j)ij的悬线往左最长能延伸到哪。rijr[i][j]rij表示点ij(i,j)ij。
2023-08-17 15:42:04
685
原创 【KMP】从入门到理解
Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。以下讲解均为个人理解,如有错误,请各位大佬指正,不喜勿喷。KMP的算法十分巧妙,时间复杂度为OnmO(n+m)Onm,甚至比哈希还好用。
2023-08-09 20:18:17
110
原创 【题解】洛谷 CF4A
判断输入的正整数能否分成两个正偶数,能则输出YES,不能则输出NO。首先,能拆成两个偶数的一定是偶数。也不对,0不是正偶数。
2023-08-09 19:47:38
120
原创 【题解】洛谷 CF1A
用 a×a 的石板覆盖 n×m 的长方形广场,允许石板覆盖的区域超出广场,不允许打破石板,石板的两侧应平行于广场两侧,要求覆盖完广场所需的石板数量最少是多少。但这也不是对的,因为可能覆盖不完全,导致你还要多一张,而C++的除自动向下取整,所以我们还要判断是否要+1。要求用a* a的覆盖n*m的,我们可以想到算出它行需要几个,列需要几个,再乘起来就好了。于是就有人说道:这也太简单了。
2023-08-09 19:34:29
143
原创 【题解】洛谷 CF139B
每个房间的四周要贴上同种墙纸,多了也不能用到别的房间,墙纸可以裁剪但不能旋转,且首尾不能拼接(竖直方向必须是同一张墙纸,不能底下用第一张上面用第二张),问至少需要多少钱。然后我们就可以开始贴壁纸了,这个就不说了,计算过程很简单,看程序即可。所以我们直接暴力枚举每一个房间的最小花费,再累加即可。有 n 个房间,m 种墙纸,第。种墙纸的长宽价格分别是。个房间的长宽高分别是。
2023-08-08 21:28:10
42
原创 【题解】洛谷 CF141E
有一个 n 个点 m 条边的无向图,每条边可能有两种颜色 S 或 M ,请你判断是否存在并输出一种这样的方案,使得其生成树中边的颜色为 S 和 M 的正好各占一半。如果无解,输出 −1 ,否则先输出这样的生成树的边的个数,再输出一种合法的情况的边的集合。我们先来分析一下什么情况是合法的,什么情况是不合法的。
2023-08-08 20:17:52
97
原创 【题解】洛谷 CF708C
给定一个含有n个点的树,如果以某点i为根,其所有的子树的大小(节点个数)都不大于n/2,则称这个点为该树的重心,现在你有一种操作,操作可以任意删除树中的一条边,然后再任意加入一条边,删除和加入后还要保证是一棵树,问第i个点是否可以通过这种操作变成树的重心,如果可以输出1,若不不行,输出0。我们一定是从这个子树里面选一个子树接在当前的根上面,否则不是最优的,那么就要从该子树里面找到一个小于等于。题目是让我们求每个点作为根节点时能否成为树的重心,所以我们用换根DP的做法来解这题。同时,别忘了更新up[i]
2023-08-07 21:39:49
68
1
原创 【题解】洛谷 CF358A
种状态,分别是外离,外切,内切,相交,内含。其中有交点的是外切,内切,相交。由于我们知道了直径,所以圆心的位置是可以算出来的,所以圆心距也能算出来。轴重合,显然不为所求。所以我们就是要判断是否有两圆相交。,若两圆相切,则切点在两圆连心线上,而两圆圆心都在。连线作为直径向上作半圆,问是否有除x轴上的交点。根据数学书的某一页,两个圆一共有。所以我们就可以开始暴力出奇迹了。轴上,所以其连心线也一定和。所以我们直接暴力枚举。
2023-08-07 19:07:06
46
1
原创 【题解】洛谷 P4047
我们知道,同一个部落的野人总是生活在附近。我们把两个部落的距离,定义为部落中距离最近的那两个居住点的距离。聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生争斗。对于任意一种部落划分的方法,都能够求出两个部落之间的距离,聪聪希望求出一种部落划分的方法,使靠得最近的两个部落尽可能远离。我们先算出边权,然后从小到大排序,然后把小的边划分到一个部落里,这样任意两个部落间的最小距离就一定大于等于这条边。
2023-08-07 11:14:28
66
1
原创 【题解】洛谷P1991
任意两个配备了一条卫星电话线路的哨所(两边都有卫星电话)均可以通话,无论他们相距多远。而只通过无线电收发器通话的哨所之间的距离不能超过 D,这是受收发器的功率限制。收发器的功率越高,通话距离 D 会更远,但同时价格也会更贵。收发器需要统一购买和安装,所以全部哨所只能选择安装一种型号的收发器。换句话说,每一对哨所之间的通话距离都是同一个 D。你的任务是确定收发器必须的最小通话距离 D,使得每一对哨所之间至少有一条通话路径(直接的或者间接的)。2 种不同的通讯技术用来搭建无线网络;同时,这里的ans应该是。
2023-08-07 10:29:57
57
1
原创 【算法】最小生成树-Kruskal
Kruskal算法的思想比Prin好理解一些。先把边按照权值进行排序,用贪心的思想优先选取权值较小的边,并依次连接,若出现环则跳过此边(用并查集来判断是否存在环)继续搜,直到已经使用的边的数量比总点数少一即可。证明:如果某个连通图属于最小生成树,那么所有从外部连接到该连通图的边中的一条最短的边必然属于最小生成树。所以不难发现,当最小生成树被拆分成彼此独立的若干个连通分量的时候,所有能够连接任意两个连通分量的边中的一条最短边必然属于最小生成树。
2023-08-07 10:10:36
70
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人