搜索与图论
文章平均质量分 50
搜索与图论板块
奋斗吧!骚年!
一名爱健身的软件工程本科生
展开
-
搜索与图论:二分图的最大匹配—匈牙利算法
题目: AcWing 861. 二分图的最大匹配给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m 条边。数据保证任意一条边的两个端点都不可能在同一部分中。请你求出二分图的最大匹配数。二分图的匹配:给定一个二分图 G,在 G 的一个子图 M 中,M 的边集 {E} 中的任意两条边都不依附于同一个顶点,则称 M 是一个匹配。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。输入格式第一行包含原创 2022-06-21 00:09:42 · 110 阅读 · 0 评论 -
搜索与图论:染色法判定二分图—染色法判定二分图
题目: AcWing 860. 染色法判定二分图给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 u 和 v,表示点 u 和点 v 之间存在一条边。输出格式如果给定图是二分图,则输出 Yes,否则输出 No。数据范围1≤n,m≤105输入样例:输出样例:二分图:当且仅当图中不含奇数环使用染色法,遍历所有点,如果点未染色将其染色为1,使用广度优先或者深度优先将该点附近的点染色为2,附近的原创 2022-06-19 21:51:31 · 233 阅读 · 0 评论 -
搜索与图论:Kruskal算法求最小生成树—Kruskal
题目: AcWing 859. Kruskal算法求最小生成树给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。输入格式第一行包含两原创 2022-06-17 23:47:01 · 115 阅读 · 0 评论 -
搜索与图论:Prim算法求最小生成树—Prim
AcWing 858. Prim算法求最小生成树给定一个 n 个点 m 条边的无向图,图中可能存在重边和自环,边权可能为负数。求最小生成树的树边权重之和,如果最小生成树不存在则输出 impossible。给定一张边带权的无向图 G=(V,E),其中 V 表示图中点的集合,E 表示图中边的集合,n=|V|,m=|E|。由 V 中的全部 n 个顶点和 E 中 n−1 条边构成的无向连通子图被称为 G 的一棵生成树,其中边的权值之和最小的生成树被称为无向图 G 的最小生成树。输入格式第一行包含两个整数 n 和原创 2022-06-17 00:07:51 · 189 阅读 · 0 评论 -
搜索与图论:Dijkstra求最短路 II—Dijkstra(最短路径)
题目: AcWing 850. Dijkstra求最短路 II给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。如果路径不存在,则输出 −1。数据范围1≤n,m≤1.5×105,图中涉原创 2022-06-16 19:46:37 · 164 阅读 · 0 评论 -
搜索与图论:Floyd求最短路—Floyd(最短路径)
题目: AcWing 854. Floyd求最短路给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,边权可能为负数。再给定 k 个询问,每个询问包含两个整数 x 和 y,表示查询从点 x 到点 y 的最短距离,如果路径不存在,则输出 impossible。数据保证图中不存在负权回路。输入格式第一行包含三个整数 n,m,k。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。接下来 k 行,每行包含两个整数 x,y,表示询问点 x 到点 y 的最原创 2022-06-16 17:53:52 · 114 阅读 · 0 评论 -
搜索与图论:spfa判断负环—spfa(最短路径)
题目: AcWing 852. spfa判断负环给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你判断图中是否存在负权回路。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式如果图中存在负权回路,则输出 Yes,否则输出 No。数据范围1≤n≤2000,1≤m≤10000,图中涉及边长绝对值均不超过 10000。输入样例:输出样例:题目分析:在spfa求最短路的基础上,原创 2022-06-16 17:26:26 · 103 阅读 · 0 评论 -
搜索与图论:spfa求最短路—spfa(最短路径)
题目: AcWing 851. spfa求最短路给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 impossible。数据保证不存在负权回路。输入格式第一行包含整数 n 和 m。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。如果路径不存在,则输出 impossible。数据范原创 2022-06-16 16:28:13 · 86 阅读 · 0 评论 -
搜索与图论:有边数限制的最短路—bellman-ford(最短路径)
题目: AcWing 853. 有边数限制的最短路给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从 1 号点到 n 号点的最多经过 k 条边的最短距离,如果无法从 1 号点走到 n 号点,输出 impossible。注意:图中可能 存在负权回路 。输入格式第一行包含三个整数 n,m,k。接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。输出格式输出一个整数,表示从 1 号点到 n 号点的最多经过 k 条边的最短原创 2022-06-16 15:41:00 · 118 阅读 · 0 评论 -
搜索与图论:Dijkstra求最短路 I—Dijkstra(最短路径)
迪杰斯特拉算法,该博客记录ACWing算法基础中,迪杰斯特拉算法的模板题,并进行实现原创 2022-06-10 23:37:19 · 124 阅读 · 0 评论 -
搜索与图论:有向图的拓扑序列—拓扑排序
拓扑排序C++模板:题目: AcWing 848. 有向图的拓扑序列给定一个 n 个点 m 条边的有向图,点的编号是 1 到 n,图中可能存在重边和自环。请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出 −1。若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 x 和 y,表示存在一条从点 x 到点 y 的有向边 (x,y)。输出格式原创 2022-06-06 23:51:13 · 211 阅读 · 0 评论 -
搜索与图论:图中点的层次—树与图的广度优先遍历
题目: AcWing 847. 图中点的层次给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环。所有边的长度都是 1,点的编号为 1∼n。请你求出 1 号点到 n 号点的最短距离,如果从 1 号点无法走到 n 号点,输出 −1。输入格式第一行包含两个整数 n 和 m。接下来 m 行,每行包含两个整数 a 和 b,表示存在一条从 a 走到 b 的长度为 1 的边。输出格式输出一个整数,表示 1 号点到 n 号点的最短距离。数据范围1≤n,m≤105输入样例:输出样例:分析:树与图的广度优先原创 2022-06-06 21:24:07 · 161 阅读 · 0 评论 -
搜索与图论:树的重心—树与图的深度优先遍历
树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我们可以只考虑有向图的存储。(1) 邻接矩阵:g[a][b] 存储边a->b(2) 邻接表:同样邻接表存储也可以使用map和vector题目: AcWing 846. 树的重心给定一颗树,树中包含 n 个结点(编号 1∼n)和 n−1 条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点原创 2022-06-06 21:10:16 · 232 阅读 · 0 评论 -
搜索与图论:八数码—BFS
题目: AcWing 845. 八数码在一个 3×3 的网格中,1∼8 这 8 个数字和一个 x 恰好不重不漏地分布在这 3×3 的网格中。例如:1 2 3x 4 67 5 8在游戏过程中,可以把 x 与其上、下、左、右四个方向之一的数字交换(如果存在)。我们的目的是通过交换,使得网格变为如下排列(称为正确排列):1 2 34 5 67 8 x例如,示例中图形就可以通过让 x 先后与右、下、右三个方向的数字交换成功得到正确排列。交换过程如下:1 2 3 ~&n原创 2022-05-04 11:53:12 · 83 阅读 · 0 评论 -
搜索与图论:走迷宫—BFS
BFS广度优先算法理解:广度优先算法就是先将第一步走的所有可能进行遍历,再根据第一步走的路径进行所有第二步的路径进行遍历,直到遍历完所有路径,或者到达目的地。注意:为了保证最短,所以会有访问数组保证是否第一次访问才进行遍历,减少多余路径。BFS有一个很经典的题目就是迷宫问题题目: AcWing 844. 走迷宫给定一个 n×m 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。最初,有一个人位于左上角 (1,1) 处,已知该人每次可以向原创 2022-04-29 21:14:01 · 94 阅读 · 0 评论 -
搜索与图论:n-皇后问题—DFS
题目: AcWing 843. n-皇后问题n−皇后问题是指将 n 个皇后放在 n×n 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。现在给定整数 n,请你输出所有的满足条件的棋子摆法。输入格式共一行,包含整数 n。输出格式每个解决方案占 n 行,每行输出一个长度为 n 的字符串,用来表示完整的棋盘状态。其中 . 表示某一个位置的方格状态为空,Q 表示某一个位置的方格上摆着皇后。每个方案输出完成后,输出一个空行。注意:行末不能有多余空格。原创 2022-04-29 20:30:16 · 65 阅读 · 0 评论 -
搜索与图论:排列数字—DFS
DFS深度优先算法理解:深度优先算法,顾名思义就是就一直往下走直到不能走为止,找到一个答案之后,返回上一层再找到答案,直到将所有情况都遍历完。注意 就是返回到上一层的时候,记得恢复原状(恢复到刚到这一层时候的样子),比如下面例子:如果两层之间有联系(每个数字只能选择一次)如果第三个数字选择3进行标记,递归返回到第二次选择时,如果没进行取消标记,则第二次不能选择3则错误题目: AcWing 842. 排列数字给定一个整数 n,将数字 1∼n 排成一排,将会有很多种排列方法。现在,请你按照字典序将所原创 2022-04-29 19:56:06 · 336 阅读 · 0 评论