- 博客(20)
- 收藏
- 关注
原创 最大流算法c++模板
残量网络:沿边剩余容量cap > 0。增广路径定理:存在增广路 ⇔ 当前流非最优。FF 每次沿任意增广路增流,流值单调增且有上界,因此有限步停;停时无增广路 ⇒ 最优。
2025-07-06 19:18:59
422
原创 树上dp P2015 二叉苹果树
树这种数据结构有着很好的递归性,所以区别于之前线性dp递推式的计算dp,树上dp则是伴随着dfs进行的动态规划。首先,什么是树上的dp,解释在树这种数据结构上做动态规划,也可以是图。最近开始学习树上的动态规划,一段新的旅程。回到这道题中,我们定义。
2025-06-14 15:19:46
608
原创 P3388 【模板】割点(割顶)
是图论中的一个重要概念,它指的是在一个连通图中,如果某个点被删除,则图的连通分量数会增加。简单来说,割点是使图分裂的关键节点。在许多实际问题中,割点的识别有助于优化网络结构、提高系统的鲁棒性等。给定一个无向图,图包含 $n$ 个点和 $m$ 条边,我们需要找出所有的割点。(能通过该节点回溯的最早的节点的发现时间)数组来标记割点。本题要求我们从一个无向图中找出所有的割点。Tarjan算法通过DFS遍历图,利用。解决割点问题通常使用。(节点的发现时间)和。
2025-06-12 14:23:53
399
原创 P3387 【模板】缩点 tarjian+toposort
给出一个带有点权的有向图,要求你找到一条路径,使得路径上经过的不同点的权值之和最大。允许重复经过点或边,但每个点的权值只能计算一次。掌握此题,可以轻松处理大量与图上环路相关的DP问题。
2025-06-11 13:12:48
516
原创 洛谷P1347 拓扑排序的应用
那么这道题本质上就是一个拓扑排序,处理输入也就是一个将字符转变成。首先这道题是让我们通过大小关系来对提供字母进行排序,那么我们可以将。型 , 然后计算入度,建图的过程。
2025-06-10 13:41:25
244
原创 洛谷P1363题解 dfs
其实对于每一个扩展出的地图而言相对于第一个地图都是相同的环境只是起点不同,但是起点不同,不能保证我们一定可以在新的环境中找到一条准确的路径,本题是希望我们通过搜索方法看能否找到一条路径可以在这个无限扩张的地图上一直走下去(有点像游戏开发里面无限扩地图的tilemap概念)为了区分不同环境之间的影响,我们需要两组xy坐标,第一组。表示绝对坐标,用于判断于其他环境中的坐标是否为同一个坐标。那么我们就可以基于上述判断来找到我们需要的路径。表示在对坐标边界取模后的坐标 , 第二组。, 那么停止条件就是。
2025-06-09 13:57:43
690
原创 洛谷 P1983题解 拓扑排序的应用
首先,我们知道拓扑排序可以处理一些现实生活中有次序的事件,所以本质上还是一种排序,但是在实际应用场景中,我们需要建模一种“大小”顺序。比如说, 洛谷P1983这道题,其实理解其本质就是等级小的点才可以通向等级高的点,等级高低就是这道题排序的标准。
2025-05-22 12:40:32
169
原创 洛谷P1127题解
我们可以将这个问题建模为一个图问题,其中每个单词代表图中的一个节点。如果单词的末字母和另一个单词的首字母相同,那么这两个单词就构成了一条有向边。我们需要找到一个欧拉路径(Eulerian Path),也就是一个遍历所有单词且每个单词使用一次的路径,要求字典序最小。图必须是强连通的,即每个字母可以通过一系列单词互相到达。图中,起点的出度比入度大1,终点的入度比出度大1,其余的节点入度和出度相同。
2025-05-20 18:51:18
383
原创 SPFA算法 + 洛谷P1807题解
SPFA算法的时间复杂度通常是O((V + E) log V),其中V是节点数,E是边数。由于SPFA使用队列来动态更新最短路径信息,通常比Bellman-Ford更快,尤其是在图的边数相对较少时。SPFA算法是对Bellman-Ford的优化。它基于队列的结构来按需更新节点的最短路径信息,而不是像Bellman-Ford那样每次都更新所有节点。接下来我们分析P1807的题意,大家肯定会一眼想到最短路径算法,如果把。
2025-05-19 21:13:49
423
原创 洛谷P4017 最大食物链计数 题解
今天我们练一道拓扑排序的题目分析题意,可以将题意转化为将数据建模成一个DAG(有向无环图),然后找到入度为0的节点作为起始点,然后找到出度为零的节点作为终止点,查找一共有多少这样的路径。
2025-05-18 18:39:49
383
原创 拓扑排序算法详解
(u → v)uv是图必须是DAG。如果图中含有环(循环依赖),则不存在有效的拓扑序列。拓扑排序的结果并不唯一——。一个有向无环图至少会有一种拓扑排序,当存在多个并行不相关的依赖关系时,可能会有多种合法的拓扑序。在以上场景中,我们都可以抽象出一个有向无环图,其中节点表示任务/课程/模块等元素,有向边表示先后依赖关系。拓扑排序可以帮助我们在线性时间内找出满足所有依赖约束的序列。
2025-05-13 21:35:52
1335
原创 洛谷P3916 图的遍历 题解
开始学习图论相关算法了~~~我第一次做的时候不会tarjian算法,使用了一个比较笨的办法,bfs爆搜答案,90分一个超时后来在看了题解之后,学习了tarjian算法求强连通分量以及缩点dfs的想法。
2025-05-12 14:09:14
579
原创 洛谷 P3694 邦邦的大合唱站队 一个思路清奇的状压dp
然后假设我们考虑到第 j 个团体的时候,这里认真看懂:我们先先选出已经包含 j 团队的状态 i,也就是满足 ( i & (1 << (j -1) ) == 1的状态 , 记为now,那么转移之前的状态就是 ( i ^ ( 1 << ( j - 1 )) , 接下来我们需要两个辅助数组 num[],sum[i][j],num记录第 i 个团队有多少人员,sum有点像前缀和,表示队列中前 i 个人中有多少 j 团队的同学;今天继续一篇不一样一点的状压dp,思路比较难想,想明白后就很容易。
2025-04-19 15:12:38
281
原创 洛谷 P3092 [USACO13NOV] No Change G 题解
下一步就是思考状态转移方程, 对于转移到第 j 个硬币,我们可以在所有状态中找到选择了 j 硬币的状态,设为 i (即满足 (i & state[j] == 1);那么这个状态 i 可以从上一个没有 j 硬币的状态转移而来 (即 i ^ state[j])(其中state[j] 就是只选 j 个硬币的状态)从 第一个物品 到 第tmp个物品 的价值总和 再 加上第 j 个 硬币的面值大小的钱, 可以从第一个物品 一直 买到 第几个物品。至此本题的思维部分已经完全结束,上ac代码:(注意最后输出的是什么)
2025-04-18 16:53:56
214
原创 洛谷 P1879 [USACO06NOV] Corn Fields G
思路与之前没有变化,我也逐渐摸清楚了这类题型的解法。又是一道地图摆放类的状压dp。
2025-04-18 13:21:36
359
原创 洛谷 P2622 关灯问题 II 题解
对于本题,首先我们建立button数组用于存储按钮信息,然后状态则是使用二进制压缩,第i位如果是1,就意味着这个灯打开着,如果为0,则说明此灯关着。(1011表示第4,2,1盏灯亮着)分析题意,我们可以发现只有按钮是1,和-1的情况下需要进行变换操作,并且在操作时需要判断一下,是否满足操作条件。本题其实不能算严格意义上的状压dp,更应该说是状态压缩加bfs。为什么不能使用dp就是因为这道题正常情况下无法保证无后效性。最后使用bfs搜索答案即可。
2025-04-16 13:33:21
227
原创 洛谷 P1896 题解
1. 在一开始可以预先选处对于一个特定行中满足条件的状态以及每个状态中有多少个国王,使用useful_state和my_sum记录。那么我们直接开始,定义dp[i][state][num]为在第 i 行的状态state时,之前一共放了num个国王的方案数。又是一个状压DP,和之前的排兵布阵非常想只是增加了在放置国王上的限制。2. 记得开long long 卡我半个小时。
2025-04-16 01:58:06
216
原创 洛谷P2704 炮兵阵地 题解
然后就是判断左右位置是否会有冲突,我们可以在遍历的时候从 0 开始一直遍历到(1<<m - 1),那么状态是从左往右一步一步生成的(10 -> 101) 在一步一步生成的过程就可以只判断新生成的部分,也就是说把右边的部分和左边的部分进行比较即可。那么对于判断是否会与山丘重合,我们建立一个a数组存储每一行的山丘状态,那么(state & a [i] )的结果不为0,就是说有山丘,这种状态舍弃(我们定义dp[S][L][i]为在第 i 行(0~n-1)的状态S(优化,因为只有相邻的三行有关系,不然会爆内存。
2025-04-14 20:21:02
252
原创 洛谷 P2831 愤怒的小鸟题解
首先我们先思考抛物线本身,我们应用贪心的思想,我们一定要选出可以至少打中一个小猪的抛物线(不然没有任何意义);然后我们定义一个数组selected表示第tp根抛物线击中状态(如selected[2] = 1001 表示第2跟抛物线击中了第4,1个小猪);首先我们定义dp[i]为在状态i时,使用最小的小鸟数量;那么什么是状态呢,状压dp是子集上的动态规划,i 此处使用二进制存储如n=4是,1100表示击中第四第三只猪的状态。4. 答案就是最终状态对应的dp数组值,可以使用maxn = 1<<n - 1。
2025-04-14 19:06:14
323
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人