摘要:
920. 最优乘车 - AcWing题库 思路:只要两个点之间可达,距离就是1 每个车站到达后面的车站的距离都是1 那么1到达n的最短距离就是转车次数+1 由于距离都是1,可以用bfs求最短路 注意: 这里的车站是单程的 技巧: s... 阅读全文
摘要:
为什么BFS可以用来求权值为1的最短路? 由于我们知道Dijkstra算法肯定是正确的,那么我们可以通过证明bfs可以实现Dijkstra算法的功能,就证明了其正确性。 首先,我们知道Dijkstra算法的核心是每次从队列中取出一个最小的点,也就是小根堆的堆顶... 阅读全文
摘要:
介绍: 可以形象的理解为洪水覆盖算法,每当我们dfs一个点,这个点就像洪水一样,把所有与它相邻的并且可以被合法的点覆盖掉。 应用场景: 通常作为解题中的一步,常用来处理有关连通块的问题。 例如:求联通块个数,求每个连通块的边长。 例题1:1097. 池... 阅读全文
摘要:
介绍: 广度优先搜索遵循从初始结点开始一层层扩展直到找到目标结点的搜索规则,它只能较好地解决状态不是太多的情况,承受力很有限。如果扩展结点较多,而目标结点又处在较深层,采用前文叙述的广度搜索解题,搜索量巨大是可想而知的,往往就会出现内存空间不够用的情况。 双向... 阅读全文
摘要:
解决问题: 双端队列主要解决图中边的权值只有 0 或者 1 的最短路问题 操作: 每次从队头取出元素,并进行拓展其他元素时 若拓展某一元素的边权是 0,则将该元素插入到队头若拓展某一元素的边权是 1,则将该元素插入到队尾与堆优化Dijkstra 一样,必须在出... 阅读全文
摘要:
什么是最小步数模型: 我们知一般的DFS求最短路通常是从棋盘中的一个点a到一个点b 但这里的最小步数是把一个棋盘看做一个状态,求从状态a到状态b的最小步数 总的来说最小步数模型是求状态之间转换的最短距离。 最短路就是求点与点之间转换的最短距离。 1107... 阅读全文
摘要:
173. 矩阵距离 - AcWing题库 题目大意:让我们求所有点0到所有1中的最短距离 总结一下: 先上结论:在使用BFS求最短路的时候,一个点第一次加入队列时候的距离,就是它的最短距离。 这里可以用反证法,设第二次加入队列的距离一... 阅读全文
摘要:
贪心 + 递归 D-和谐之树_"华为杯" 武汉大学21级新生程序设计竞赛 (nowcoder.com) 这题我在做的时候根本没有理解清楚题意,也可能是受到样例解释的影响? 就比如n=10的时候,我就认为最大的节点编号是21,因为[1,10]一共可... 阅读全文
摘要:
4312. 出现次数 - AcWing题库 本题的难点主要在于给定你区间的左右端点,如何求出来这个区间内成功匹配的个数 这里肯定要用前缀和,不然1e8的时间复杂度很悬 但是用前缀和的时候,我们要对左右端点稍微处理一下 在使用KMP算法匹配的时候... 阅读全文
摘要:
4395. 最大子矩阵 - AcWing题库 在做这道题的时候,我陷入一个误区,那就是以为必须在矩阵c里面找最大值,但那样的话最好的时间复杂度是O(N^2*log(N^2)),大约8KW,肯定TLE 其实我们好好研究一下这个矩阵元素的组成 ... 阅读全文