
搜索
QingQingDE23
这个作者很懒,什么都没留下…
展开
-
AcWing 1148. 秘密的牛奶运输 题解(最小生成树)
AcWing 1148. 秘密的牛奶运输 解题思路:先找到最小生成树,计算出权值之和并标记所有最小生成树内的边。之后遍历所有边,找到包含两个点的路径的上的最大边和次大边并记录,(当两个点找到一条新的路径相连时,只有断开哪个最大边,才能保证找到的是次小生成树,所以要记录最大边,记录次大边是为了防止最大边已经被用过),之后遍历所有非最小生成树内的边,依次替换树内的边,最终找到次小生成树大佬题解原地址......原创 2022-07-06 14:28:33 · 129 阅读 · 0 评论 -
AcWing 340. 通信线路 题解(二分+双端队列BFS求最短路)
AcWing 340. 通信线路y总说有noip提高组水平,确实题意转换比较难,想找到解法也难,希望自己再努力努力某一天可以只凭自己写出这种水平的题解题思路:二分+双端队列BFS求最短路,思维转换比较难,几个思维的拐弯点在:①找合适的小于k的值x,用二分。②在判断x是否合适时,可以用双端队列找最短路...原创 2022-06-22 17:49:37 · 292 阅读 · 0 评论 -
AcWing 1135. 新年好 题解(最短路+搜索)
AcWing 1135. 新年好比较复杂的一道题,需要DFS+最短路,先用spfa找出六个起点到其余个点的最短路,再暴搜所有走亲戚的路线方案,找到最小值返回原创 2022-06-22 14:10:06 · 255 阅读 · 0 评论 -
AcWing 920. 最优乘车 题解(最短路—BFS)
AcWing 920. 最优乘车因为边权重都是1,所以可以直接用bfs求最短路,本题有一个迷惑的地方在代码中已做解释,这种思维转换方式可以好好体会以下原创 2022-06-21 17:58:23 · 306 阅读 · 0 评论 -
AcWing 181. 回转游戏 题解(搜索—IDA*搜索)
AcWing 181. 回转游戏IDA*搜索,预估值就是f(),计算中间八个块最多的数字离8还差几,这次搜索没有明确限制搜索的层数原创 2022-06-19 16:06:45 · 647 阅读 · 0 评论 -
AcWing 180. 排书 题解(搜索—IDA*算法)
AcWing 180. 排书IDA*算法,和迭代加深类似,多了一个预估值f()(最少还需要搜索多少部),还是限制搜索的层数,如果目前搜索的层数+预估的最小搜索层数都大于最大搜索层数要求,那么这个搜索肯定不和条件,就直接return false;...原创 2022-06-18 22:20:56 · 245 阅读 · 0 评论 -
AcWing 171. 送礼物 题解(搜索—双向DFS)
AcWing 171. 送礼物双向DFS,将所有数据分为两部分,前半部分组合求和之后放入表中,后半部分对表二分找到合适的值(允许的最大值)和第二部分的数挨个进行组合找到最大值原创 2022-06-15 17:20:36 · 152 阅读 · 0 评论 -
AcWing 170. 加成序列 题解(搜索—迭代加深DFS)
AcWing 170. 加成序列迭代加深的DFS,就是给DFS加一个限制,限制搜索的层数,避免搜索过深,下面代码中加的限制变量就是depth,限制搜索的层数,有点类似于用BFS优化DFS,先把固定层数的所有DFS搜完,找不到答案的话,再允许搜更深层的...原创 2022-06-15 16:08:52 · 159 阅读 · 0 评论 -
AcWing 168. 生日蛋糕 题解(搜索—DFS剪枝)
AcWing 168. 生日蛋糕DFS剪枝经典题,前三个剪枝方法很经典,最后一个推公式很难想,有空可以多看看原创 2022-06-15 12:30:46 · 160 阅读 · 0 评论 -
AcWing 167. 木棒 题解(搜索—DFS剪枝)
AcWing 167. 木棒DFS剪枝,具体过程看代码内部,另外排序也算剪枝的一部分原创 2022-06-14 18:31:58 · 142 阅读 · 0 评论 -
AcWing 166. 数独 题解(搜索—DFS的剪枝)
AcWing 166. 数独DFS剪枝,这里的剪枝操作是考虑优先考虑的需要填的数最少的格子,这样就能快速将所有格子填满,因为答案唯一,所以可行原创 2022-06-13 15:48:48 · 120 阅读 · 0 评论 -
AcWing 165. 小猫爬山 题解(搜索—DFS的剪枝)
AcWing 165. 小猫爬山DFS剪枝,剪枝就是减小搜索树根节点辐射出的树枝数,这里的剪枝操作是将猫的重量排序,将重量大的猫放在前面先安排车辆,(当已经被占的重量越大时,这辆车所能容纳的质量就越少,辐射出的方案数就越少,所以总方案数就越少)...原创 2022-06-12 18:06:46 · 167 阅读 · 0 评论 -
AcWing 1117. 单词接龙 题解(搜索—DFS)
AcWing 1117. 单词接龙这道题要学会的是用sub和k值找出字符串首尾相同部分的长度,还有就是用word数组记录所有单词,这样用的时候更方便,DFS的理解又加深了一层,继续加油原创 2022-06-12 16:20:20 · 87 阅读 · 0 评论 -
AcWing 1116. 马走日 题解(搜索—DFS)
AcWing 1116. 马走日DFS经典应用,需要记住的是怎么记录已经访问过的地点数,怎么判断已经访问过所有点,还有就是DFS的恢复现场操作原创 2022-06-12 15:32:31 · 132 阅读 · 0 评论 -
AcWing 1113. 红与黑 题解 (搜索——BFS)
AcWing 1113. 红与黑BFS 计算数量,不是难题原创 2022-06-11 15:59:20 · 195 阅读 · 0 评论 -
AcWing 1112. 迷宫 题解(搜索)
AcWing 1112. 迷宫虽然是DFS题,但是BFS也能写,看了一下y总的代码,思路差不多,就记录自己写的BFS版本了原创 2022-06-10 23:41:53 · 156 阅读 · 0 评论 -
AcWing 179 八数码 题解(搜索—A*搜索)
AcWing 179 八数码A*算法应用,缩减搜索范围,达到提高搜索效率的效果。需要注意的是,入堆的是预估距离(这里是曼哈顿距离)+实际距离,另外需要记住的就是利用堆去记录上一步的状态和命令序列的操作...原创 2022-06-09 10:24:28 · 129 阅读 · 0 评论 -
AcWing 178 第K短路 题解(搜索—A*搜索)
AcWing 178 第K短路A*搜索,应用于点特别多的图找最短路的情况思路:先用dijkstra算法求出各个点到终点的最短距离,这些距离的排序其实照应他们距离起点的距离的顺序,所以在找到距离最短路之后,从起点依次遍历距离他的点,距离近的点被遍历的次数少,距离远的点会留在队列中被多次遍历...原创 2022-06-07 15:55:48 · 113 阅读 · 0 评论 -
AcWing 190 字串变换 题解(搜索—双向广搜)
AcWing 190 字串变换双向广搜的思路:从初始状态和目标状态同时开始搜索,直到找到两个搜索的状态的交集,可以大大节省搜索需要的时间。注意每次搜索都要把一层完整的搜完,避免漏掉答案的情况出现双向广搜示意图:原创 2022-06-01 15:57:32 · 119 阅读 · 0 评论 -
AcWing 175 电路维修 题解(BFS—双端队列广搜)
AcWing 175 电路维修双端队列的应用,还是就是权重为0的点加入前面,权重为1的点加到后面(这种操作只有双端队列可以完成),之后按照BFS找最短路的套路来就可以#include<bits/stdc++.h>using namespace std;const int N = 550;#define x first#define y secondtypedef pair<int, int> PII; int T;int n, m;char g[N][N原创 2022-05-31 16:28:06 · 155 阅读 · 0 评论 -
AcWing 1107 魔板 题解(BFS)
AcWing 1107 魔板BFS的应用,思路就是记录下魔板的理想状态和初始状态,之后不断按照规则对魔板进行变换,和理想状态进行对比,直到达成理想状态,注意优先队列的使用#include<bits/stdc++.h>using namespace std;const int N = 10;char g[2][4];unordered_map<string, pair<char, string>>pre; //一个字符串映射到一个操作和一个状态 uno原创 2022-05-30 16:49:07 · 247 阅读 · 0 评论 -
AcWing 173 矩阵距离(BFS)
AcWing 173 矩阵距离思路:利用bfs实现多源最短路,考虑1字符所在的点在第一层,距离值为0,先将所有距离为0的点放入队列,为第一层,然后对第一层所有点的上下左右所有不在层内的点进行遍历,距离值为上一层加一,且入队,挨着第一层的点为第二层,他们的距离都为1,接着对第二层执行该操作,之后第三层…需要注意的是,给的A矩阵是字符矩阵,要注意读入和判断#include<bits/stdc++.h>using namespace std;const int N = 1010;ty原创 2022-05-25 15:19:53 · 202 阅读 · 0 评论 -
AcWing 1100 抓住那头牛 题解(BFS)
AcWing 1100 抓住那头牛广搜实现最短路的妙用,这个思路值得记一下这两天因为一些有的没的事挺难受的,刷题使人快乐吧应该,继续…#include<bits/stdc++.h>using namespace std;const int N = 2e5 + 10;int n, k;int dis[N];int q[N];int bfs(){ memset(dis, -1, sizeof dis); q[0] = n; dis[n] = 0; int hh =原创 2022-05-25 14:26:35 · 149 阅读 · 0 评论 -
AcWing 188 武士风度的牛 题解(BFS)
AcWing 188 武士风度的牛BFS简单应用,注意马走日就行了#include<bits/stdc++.h>using namespace std;const int N = 200, M = N * N; #define x first#define y secondtypedef pair<int, int>PII;int n;int c, r;char g[N][N];PII q[M];int dx[8] = {-1, -2, -2, -1原创 2022-05-04 23:28:10 · 300 阅读 · 0 评论 -
AcWing 1076 迷宫问题 题解(BFS—最短路径)
AcWing 1076 迷宫问题需要注意:pre[i][j]记录的是逆推的情况下,[i, j]是从哪个点过来的,也就是正推的情况下,最短路径上,[i, j]的下一个点,所以需要逆推一遍bfs,然后正序输出#include<bits/stdc++.h>using namespace std;const int N = 1010, M = N * N;#define x first#define y secondtypedef pair<int, int>PII;原创 2022-04-30 16:05:20 · 368 阅读 · 0 评论 -
AcWing 1106 山峰和山谷 题解(BFS)
AcWing 1106 山峰和山谷BFS的应用题,新学到的比较连通块和边界的方法,还有就是注意山谷和山峰的has_higher和has_lower的实际意义,别把山谷和山峰搞错了#include<bits/stdc++.h>using namespace std;const int N = 1010;#define x first#define y secondtypedef pair<int, int>PII;int n;PII q[N * N];bo原创 2022-04-30 00:36:44 · 354 阅读 · 0 评论 -
AcWing 1097 池塘计数 题解(BFS—连通块—Flood Fill)
AcWing 1097 池塘计数连通块问题,Flood Fill(洪水覆盖)算法,很经典的宽搜,注意细节即可#include<bits/stdc++.h>using namespace std;const int N = 1010;#define x first#define y secondtypedef pair<int, int>PII;int n, m;int ans;PII q[N * N];char g[N][N];bool st[N][原创 2022-04-29 16:14:16 · 359 阅读 · 0 评论 -
AcWing 1098 城堡问题 题解(BFS—位运算)
AcWing 1098 城堡问题 BFS的应用题,需要注意的是,因为四个方向的数字刚好代表四位二进制数,所以可以用位运算操作,判断哪一块空间某个方向是否有墙。用宽搜遍历所有空间即可得出答案#include<bits/stdc++.h>using namespace std;const int N = 55;#define x first#define y secondtypedef pair<int, int>PII;PII q[N * N];int n,原创 2022-04-29 23:25:53 · 245 阅读 · 0 评论 -
AcWing 845 八数码 题解(BFS)
题很巧妙,之前我还真不知道可以把矩阵问题换算到队列,用一维数组、队列解决(可能因为我太菜了),这个题的思路是真的巧妙原题链接:https://www.acwing.com/problem/content/847/解题思路:把不同的矩阵状态转化为一维字符串表示,从第一个初始矩阵开始,把每个可以达到的矩阵状态存入队列,挨个将队首元素出队,判断这个矩阵能达到的状态,将可以达到的状态入队,直到达到最终状态#include<iostream>#include<cstring>#inc原创 2021-09-03 21:56:58 · 105 阅读 · 0 评论 -
AcWing 844 走迷宫(BFS)
#include<iostream>#include<cstring>using namespace std;const int N = 110;typedef pair<int, int> PII; int g[N][N];int d[N][N];int n, m;PII q[N * N];//数组队列,需要开N*N,因为每个点都有可能入队int bfs(){ int hh = 0, tt = 0; memset(d, -1, size原创 2021-09-02 20:29:57 · 87 阅读 · 0 评论 -
AcWing 843 n-皇后问题 (DFS)
#include<iostream>using namespace std;const int N = 20;//考虑到对角线情况 ,深搜的数一般设为题中所给的两倍int col[N];//记录第i列目前有没有放皇后int dg[N];//记录这条正对角线有没有放皇后,y = -x + b, b = y + x,同一条正对角线的b值相同,所以y+x值相同,所以代码中调用dg都是dg[i + u] int udg[N];//记录这条负对角线有没有皇后 ,y = x + b, b =原创 2021-09-02 14:05:05 · 107 阅读 · 0 评论 -
AcWing 842 排列数字 题解 (DFS)
#include<iostream>using namespace std;const int N = 10;int path[N];//path[i]记录第i个位置放什么数 bool st[N];//st[i]记录数字i是否被使用过 int n;void dfs(int u){//u代表第u个位置 if(u == n){//如果已经放到最后一位,就输出 for(int i = 0; i < n; i ++ ){//path数组从第0位开始存,所以从第0位开始原创 2021-09-02 13:13:35 · 132 阅读 · 0 评论 -
树的重心 题解(图论 图的储存添加元素和DFS遍历 模板)
#include<iostream>#include<cstdio> #include<algorithm>#include<cstring>using namespace std;const int N = 100010, M = N*2;bool st[N];int h[N], e[M], ne[M];int ans = N, idex, n;//ans表示连通块的节点数量最大值 void add(int a, int b){ e[原创 2021-08-11 13:34:07 · 92 阅读 · 0 评论 -
AcWing 图中点的层次 题解 (图论 图的BFS 模板)
```cpp#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 1e5 + 10, M = N * 2;int e[N], ne[N], h[N], idx;int n, m;int d[N], q[N];void add(int a, int b){//节点加入邻接表 e[idx] = b; ne[idx] = h[a.原创 2021-08-11 16:41:44 · 109 阅读 · 0 评论 -
AcWing 走迷宫 题解(BFS 模板)
#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 110;typedef pair<int, int>PII;int n, m;int g[N][N];int d[N][N];PII q[N*N];int bfs(){ int hh = 0, tt = 0; memset(d, -1, sizeof(d))原创 2021-08-11 16:44:33 · 189 阅读 · 0 评论