多学习。

随笔分类 -  搜索与图论

包括DFS,BFS,树与图的深度优先遍历,树与图的广度优先遍历,拓扑排序,Dijkstra,bellman-ford,spfa,Floyd,Prim,Kruskal,染色法判定二分图,匈牙利算法等内容。
摘要:AcWing861.二分图的最大匹配 题解 匈牙利算法:若该左点匹配到的右点之前已匹配到了左点,则查找该之前匹配的左点可否换一个点,使新的左点能匹配该右点 #include <iostream> #include <cstring> #include <cstdio> using namespace 阅读全文
posted @ 2022-06-01 12:01 czyaaa 阅读(27) 评论(0) 推荐(0) 编辑
摘要:AcWing860.染色法判定二分图 题解 若出现奇数环,染色一定矛盾 当前点没有染色,就染色包括其子节点 #include <iostream> #include <cstring> #include <cstdio> using namespace std; const int N = 1e5 阅读全文
posted @ 2022-06-01 11:10 czyaaa 阅读(29) 评论(0) 推荐(0) 编辑
摘要:AcWing859.Kruskal算法求最小生成树 题解 可以通过并查集查看a,b的根结点是否相同,相同则代表连通,即会成环不能加入最小生成树 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> 阅读全文
posted @ 2022-06-01 10:24 czyaaa 阅读(31) 评论(1) 推荐(1) 编辑
摘要:AcWing858.Prim算法求最小生成树 题解 [注:先累加再更新防止自环使得dist[j]变小(自环为负数dist[j] = min(dist[j], gt][j]),j==t Prim的思路就是每次找出距离最近的点,再用距离最近的点更新其他点使其变得更近,寻得n-1条边成为最小生成树 #in 阅读全文
posted @ 2022-05-31 17:10 czyaaa 阅读(33) 评论(0) 推荐(0) 编辑
摘要:二分图:所有点可以划分为两个集合,两个集合中的点存在相连边,而集合内部的点不存在相连的边,故不能含有奇数环,不然会导致某个点无法划分到这两个集合中 题目 朴素Prim:AcWing858.Prim算法求最小生成树 Kruskal:AcWing859.Kruskal算法求最小生成树 染色法判断二分图: 阅读全文
posted @ 2022-05-31 17:10 czyaaa 阅读(17) 评论(0) 推荐(0) 编辑
摘要:AcWing854.Floyd求最短路 题解 注意:k, i, j的顺序不能改变,必须以k作为桥梁 #include <iostream> #include <cstring> using namespace std; const int N = 210; int g[N][N], n, m, k; 阅读全文
posted @ 2022-05-29 17:19 czyaaa 阅读(24) 评论(0) 推荐(0) 编辑
摘要:AcWing852.spfa判断负环 题解 判断负环的思路:利用抽屉原理,当边数为n时,若要连成一条无环的直线我们需要n+1个点,但我们只有n个点,故可以判断出存在环。 且由于spfa更新路径的特性,代表这个环会使得路径变小,即这个环为负权环 #include <iostream> #include 阅读全文
posted @ 2022-05-29 16:25 czyaaa 阅读(42) 评论(0) 推荐(0) 编辑
摘要:AcWing851.spfa求最短路 题解 spfa算法即为Bellman-Ford的优化,只有每次dist[a]发生了变化才需要更新对应的dist[b],通过此减少循环次数 #include <iostream> #include <cstring> #include <queue> using 阅读全文
posted @ 2022-05-29 15:55 czyaaa 阅读(36) 评论(0) 推荐(0) 编辑
摘要:AcWing853.有边数限制的最短路 题解 存在负权回路可能会导致无法求最短路,比如说图中 2的自环,没转一圈距离-1,我们求1到5的距离可以转无穷圈2,即1到2的距离为 -无穷 循环n次求的是长度不超过n条边的最短路 #include <iostream> #include <cstring> 阅读全文
posted @ 2022-05-29 12:01 czyaaa 阅读(28) 评论(0) 推荐(0) 编辑
摘要:AcWing850.Dijkstra求最短路 II 题解 #include <iostream> #include <cstring> #include <queue> #include <vector> using namespace std; const int N = 1e6 + 10; ty 阅读全文
posted @ 2022-05-25 20:40 czyaaa 阅读(42) 评论(0) 推荐(0) 编辑
摘要:详解 规定n为点数, m为边数 稀疏图用堆优化Dijkstra, 稠密图用朴素Dijkstra 题目 朴素Dijkstra:AcWing849.Dijkstra求最短路 I 堆优化Dijkstra:AcWing850.Dijkstra求最短路 II bellman-ford:AcWing853.有边 阅读全文
posted @ 2022-05-24 21:55 czyaaa 阅读(9) 评论(0) 推荐(0) 编辑
摘要:AcWing849.Dijkstra求最短路 I 题解 注意:本题存在重边,故g[x][y] = min(g[x][y], z); #include <iostream> #include <cstdio> #include <cstring> using namespace std; const 阅读全文
posted @ 2022-05-24 21:54 czyaaa 阅读(22) 评论(0) 推荐(0) 编辑
摘要:AcWing848.有向图的拓扑序列 题解 额外知识:有向无环图必然有拓扑序列 将入度为0的点放入队列,再逐一拿出,那些以此点为入度的点减1,若有新的入度为0则放入队列。 #include <iostream> #include <cstdio> #include <cstring> using n 阅读全文
posted @ 2022-05-24 10:04 czyaaa 阅读(43) 评论(0) 推荐(0) 编辑
摘要:AcWing845.八数码 题解 还是一道bfs标准题,每次存入4个方向的状态,直到找到最终状态 #include <iostream> #include <cstdio> #include <unordered_map> #include <queue> using namespace std; 阅读全文
posted @ 2022-05-24 09:27 czyaaa 阅读(18) 评论(0) 推荐(0) 编辑
摘要:AcWing847.图中点的层次 题解 #include <iostream> #include <cstring> #include <queue> #include <cstdio> using namespace std; const int N = 1e5 + 10; int n, m; q 阅读全文
posted @ 2022-05-23 22:47 czyaaa 阅读(28) 评论(0) 推荐(0) 编辑
摘要:AcWing846.树的重心 题解 树的深度优先遍历:可以算出各子树的结点数 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N = 1e5 + 10; int ans = 阅读全文
posted @ 2022-05-23 22:11 czyaaa 阅读(30) 评论(0) 推荐(0) 编辑
摘要:AcWing844.走迷宫 题解 stl #include <iostream> #include <cstring> #include <queue> using namespace std; typedef pair<int,int> PII; const int N = 110; queue< 阅读全文
posted @ 2022-05-23 15:50 czyaaa 阅读(30) 评论(0) 推荐(0) 编辑
摘要:AcWing843.n-皇后问题 题解 解法一:对每一行进行遍历,因为皇后不在同一列,故每一行取不同列(列行转换同理) #include <iostream> #include <cstdio> //对每一行进行遍历,由于皇后不能在同一列,故每一行的摆放列都不同 using namespace st 阅读全文
posted @ 2022-05-22 17:14 czyaaa 阅读(39) 评论(0) 推荐(0) 编辑
摘要:AcWing842.排列数字 题解 #include <iostream> using namespace std; const int N = 10; bool vis[N]; int nums[N], n; void dfs(int u) { if(u == n + 1) { for(int i 阅读全文
posted @ 2022-05-22 16:54 czyaaa 阅读(27) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示