8月31日
我复习了acwing提高课第二章搜索中的红水漫灌和最短路模型的六道题(1097,1098,1106,1076,188,1100)
学习了多源BFS和最小步数模型的两道题(173,1107)
9月1日
双端队列广搜:
acwing 175 电路维修
(本题本质和dijkstra堆优化一样,注重点在于路径模拟,须同时模拟点的边的下标)
双向广搜:
acwing 190 字串变换
(本题利用双向bfs优化空间和时间,注意合理使用函数降低代码量)
A算法:本质上是对bfs的一种优化,只是做了两个题,暂时使用并不熟练
acwing 178 第k短路
(同时使用dijkstra和A,dijkstra初始点是终点,求出所有点到终点的最短距离,A从起点开始,第K短路一定是K次遍历到终点的路)
acwing 179 八数码
(暴力bfs扫能过,但是最好还是用A优化或者双向队列更好,八数码的逆序对必须是偶数,否则必定无解)
9月2日
DFS之连通性模型 :
acwing 1112 迷宫:
(很简单的dfs,但是有一点需要注意,这题不需要还原现场即可求出,原因需要好好思考)
acwing 1113 红和黑
(很简单的dfs,这题也不需要还原现场)
DFS之搜索顺序:
acwing 1116 马走日:
(很简单一道题,搜索顺序是八个点)
acwing 1117 单词接龙:
(这道题需要将单词之间的关系抽象成一个稠密图,距离是这两个单词最小重合部分,接龙想要达到最长应该让单词有最小重合部分就行)
acwing 1118 分成互质组:
(这道题做法很妙,用了贪心证明,先对第一个组查找,尽可能的扩大组,到无法扩大后开新组,这样搜出来的组数一定最优)
DFS之剪枝与优化:
acwing 165 小猫爬山:
(这题乍一看很像分成互质组,但是用同样的做法会T,原因是这题需要对搜索顺序进行优化,优先搜索分支小的选择,因为没开二维数组,所以本题需要还原现场,用还原现场来优化空间)
9月3日
单源最短路的建图方式:
acwing 1129 热浪(dijkstra的堆优化模板题,我无法完全默写下来,这是个很大的问题,基础课一定要经常复习!)
acwing 1128 信使(同上)
vj 补题
B - Stronger Takahashi 很简单的一个双端队列题,唯一有难度的只有那一拳的打法,但是4中2x2的格子打法完全可以抽象成八条路,只要暴力全入队就行
G - Squares 这题非常秒,利用公式推导可以确定一个区间[p, q] ,区间内同奇同偶的数就是题目中要找的x,y
9月4日
单源最短路的建图方式
acwing 1127 香甜的黄油(这道题需要对每一个点进行一次最短路算法操作,但是dijkstea堆优化的时间复杂度是O(mlogn),这样最终复杂度就是nmlogn,非常危险的时间,所以要想办法优化,于是用spfa,正常情况m,卡数据的情况mn的算法)
acwing 1126 最小花费 (边权的建立就比较抽象,初始点为100,对每一次外搜的边权随着百分比递减,用最终数据即可算出答案)
acwing 920 最优乘车(这道题可以明显感觉到图非常不好建,很抽象,不同的理解可以建立许多不同的图,单向边,能到达就为1,否则为0,bfs扫到每次距离+1,扫到后初始化,防止循环不断累加)
9月5日(周天放个假,学lua)
9月6日
AcWing 903. 昂贵的聘礼(这道题难度最大的就是建图,图建立的不好,时间复杂度就大,建图方式很抽象)
AcWing 1135. 新年好(dijkstra+dfs枚举,代码量蛮大的,但是越写越有思路,写着很舒服)
vj补题 D - A Secret(完完全全的kmp板子题,但是考的是kmp的深度理解,如果对kmp中next数组不够了解,对kmp的算法不了解,很难做出来,kmp板子里next数组一定要是0开头的,-1开头尽量别用)
9月7号
一天满课,晚上vj训练赛,累了
9月8号
AcWing 340. 通信线路(用二分+双端队列查找到除去k条路后的最大值,双端队列的作用是堆,但是只有两个值所以用双端队列)
AcWing 342. 道路与航线(这道题因为有负环边,一开始用的spfa,T了,仔细读了题,发现没用负环回路,感觉可以dijkstra,结果忽略了航线和道路合用时是可以有负权回路,wa了,后来看了y总的讲解,居然是在输入航线前dfs找连通块,然后拓扑排序对每一个连通块dijkstra)
9月12号
AcWing 341. 最优贸易(两次spfa,正着来一次,反着来一次,目的是为了求出前 i 个的最小值和最大值,然后利用这个这两个数组,运用DP的思想找到最优答案)
AcWing 1137. 选择最佳线路(简单的堆优化dijkstra,将所有可行的起点都入队即可)
AcWing 1131. 拯救大兵瑞恩(y总的做法是双端队列BFS + 状态压缩,但是这题只需要用BFS和状态压缩,开一个二维数组,第一维表示坐标,将x和y压缩成一个数表示,第二维存的是钥匙的状态,二进制表示,第i位上1为有第i把钥匙,0为无,然后bfs搜点即可,利用st数组可将时间复杂度控制在线性)
AcWing 1134. 最短路计数(这题之前vj做过,一模一样,做起来没什么压力,DP+BFS)
VJ秋季训练赛团队赛第4场5道题全部补完,收获了很多