图论·刷题总结

文章目录

图论

题单

灵魂拷问

  • DAG或者UDAG
  • 是否有重边或者自环
  • 从根节点或者其他节点开始是否一样?
  • 是否存在多个连通块

思维

  • 反向构造图
  • 完全图,只保留有用边

图论问题

连通块问题

DFS:染色法

  • 将每一个块染色。

并查集:边带权的并查集

  • 边带权:连通块的数量。
  • 所有的信息在根节点上

判断是否有环

DFS:三色判定法。

  • **为什么需要三种颜色?**遍历过且无环的节点为2,遍历过但有环路径上的节点为1。
  • dfs判定环看是否有重复遍历。
  • 但有重复遍历,不一定有环。

拓扑排序:

  • 拓扑排序适合于有向无环的图
  • 如果无法输出全部结点,说明有环

判定是否存在负环

Bellman算法:更新次数大于n-1

  • 额外增加一次循环(表示长度为n)的路径,如果更新则存在负环。

SPFA算法:更新次数大于n-1

  • 使用count记录更新次数。
  • 注意:存在多个连通块,因此必须让每个节点都入对列,保证检查每一个连通块的负环情况

标准最短路问题

  • BFS:等权重最短路。在这种情况下,BFS的效率是最高的
  • Floyd:多源最短路问题

最短路问题的建模

最小修改次数问题

将字符串A变为字符串B的最短路问题:数独
  • 比较适用于双向BFS,状态为当前串。
  • 给定可以转移的状态列表,给出从状态A转换为状态B的最短路径,本质是BFS
  • 矩阵相关:注意先将矩阵转换为字符串,然后按照正常的BFS来搜索
跳跃游戏
  • 状态为当前位置
  • 最优性原理:所有节点不会重复遍历,且遍历过即最优。

网格图问题:2D坐标->1D坐标

  • 所给出的图是一个nxm的网格
  • 当作一般的图即可,使用邻接矩阵存储。一般下一次添加的节点是相邻节点。
  • 网格/坐标图中邻接矩阵的构建 :一般采用im+j / 手动编号(0~nm-1)的方式。
  • 不要暴力使用map构造pair<int,int>的映射!!!

坐标图问题:坐标手动编号->[1,n]


利用最短路辅助解决问题

  • 2972转换字符串的最小成本:这题字符串长度为1e5,状态数过多,用dj和bfs不可能过。但我们可以使用暴力的方法,求出每一步转换的最小成本,然后利用最短路求出这些所有转换成本,最终解决。

二分图应用

寻找互不冲突的两个组

  • DFS二分图染色判定。

寻找一一配对

  • 每一个配对都是二分图中的匹配
  • 匈牙利二分图匹配算法。

例题

一、图的遍历

§1.1 深度优先搜索(DFS)

  • 寻找有环:三色标记法,原因是为了区分不同的连通块和遍历起点(有向图)
  • DFS适合搜索所有可能的路径,但不适用于最短路问题。
分类 题号 题目 备注
连通块基础 547 🟩省份数量 🟩重要
连通块基础 1971 🟩寻找图中是否存在路径 🟩重要
连通块基础 841 钥匙和房间 🟩重要
连通块基础 1319 连通网络的操作次数 🟦扩展
连通块基础 2316 🟩统计无向图中无法互相到达点对数 🟦扩展
连通块基础 2492 两个城市间路径的最小分数 🟦扩展
连通块基础 2685 统计完全连通分量的数量 🟦扩展
路径搜索 797 🟩所有可能的路径 🟩重要
路径搜索 LCP 07 传递信息 🟦扩展
路径搜索 1306 跳跃游戏 III 🟦扩展
DAG / 拓扑相关 207 🟩课程表 🟩重要
DAG / 拓扑相关 802 找到最终的安全状态 🟩重要
DAG / 拓扑相关 2192 有向无环图中一个节点的所有祖先 🟦扩展
图上扩散 / 传播 2101 引爆最多的炸弹 🟦扩展
图上扩散 / 传播 924 尽量减少恶意软件的传播 🟦扩展
并查集可替代 DFS 721 账户合并 🟦扩展
删除 3387 两天自由外汇交易后的最大货币数 难度偏高 / 综合技巧
删除 3695 交换元素后的最大交替和 难度偏高
删除 928 尽量减少恶意软件的传播 II >2000
删除 2092 找出知晓秘密的所有专家 >2000
删除 3108 带权图里旅途的最小代价 >2000
删除 3310 移除可疑的方法 题型偏综合
删除 261 以图判树 会员题
删除 323 无向图中连通分量的数目 会员题

一、BFS 最短路(边权为 1)

边权为1,使用BFS最快。

分类 题号 题目 备注

基础单源 BFS 3243 🟩新增道路查询后的最短距离 I 🟩重要

基础单源 BFS 1311 🟩获取你好友已观看的视频 🟩重要

多源 / 全源 BFS 3015 🟩按距离统计房屋对数目 I 🟩重要

状态图 BFS 1129 🟦颜色交替的最短路径 🟦经典 / 分层状态

建图转换 815 🟦公交路线 🟦经典 / 超时风险低

环检测 & BFS 2608 🟦图中的最短环 🟦扩展

综合模拟 2039 🟦网络空闲的时刻 🟦扩展

会员题(跳过) 3807 修复边以遍历图的最小成本 会员题

以下是对该题单的二次筛选结果,保留最具代表性、适合进一步练习的题目:

一、图论建模 + BFS 最短路

  • 最短路=最短距离=最短修改次数,这种说法可以建模为图论的最短路问题:转化数字的最小运算数 ,开锁次数,转化数字的最小运算数
  • BFS和双向BFS仅适用于有限状态数的最短路问题,状态的数量等于时间复杂度
  • 状态的定义:数独?华容道?

分类 题号 题目 备注

基础状态建模 433 🟩最小基因变化 🟩重要

基础状态建模 752 🟩打开转盘锁 🟩重要

矩阵状态 BFS 1284 🟩转化为全零矩阵的最少反转次数 🟩重要

矩阵状态 BFS 773 🟩滑动谜题 🟩重要

字符串状态 BFS 127 🟦单词接龙 🟦重要 / 建议双向 BFS

字符串状态 BFS 301 🟦删除无效的括号 🟦经典扩展

字符串状态 BFS 854 🟦相似度为 K 的字符串 🟦难度偏高 / 剪枝练习

图论状压 847 🟦访问所有节点的最短路径 🟦经典 / 状态压缩

跳跃游戏类 1345 🟩跳跃游戏 IV 🟩重要

跳跃游戏类 2059 🟩转化数字的最小运算数 🟩重要

跳跃游戏类 1654 🟦到家的最少跳跃次数 🟦经典 / 有界 BFS

跳跃游戏类 2998 🟦使 X 和 Y 相等的最少操作次数 🟦扩展

跳跃游戏类 3629 🟦通过质数传送到达终点的最少跳跃次数 🟦扩展

会员题(跳过) 1197 进击的骑士 会员题

会员题(跳过) 3141 最大汉明距离 会员题

综合 / 较难 488 🟪祖玛游戏 难度偏高 / 模拟复杂

综合 / 较难 514 🟪自由之路 难度偏高 / 环形 DP+BFS

综合 / 较难 3690 🟪拆分合并数组 难度偏高

二、拓扑排序

分类 题号 题目 备注

前置理解 1557 🟩可以到达所有点的最少点数目 🟩重要 / 理解入度为0的点

基础拓扑排序 210 🟩课程表 II 🟩重要 / 输出拓扑序

基础拓扑排序 802 🟩找到最终的安全状态 🟩重要 / 反向图思维

拓扑 + 建图 2115 🟦从给定原材料中找到所有可以做出的菜 🟦经典 / 依赖关系建模

拓扑 + 矩阵 2392 🟦给定条件下构造矩阵 🟦扩展 / 行列双拓扑

拓扑 + 贪心 310 🟦最小高度树 🟦经典 / 剥洋葱法

拓扑 + 验证 1361 🟩验证二叉树 🟩重要 / 入度出度判定

难度偏高(跳过) 1591 奇怪的打印机 II 2291分 / 复杂模拟

难度偏高(跳过) 1203 项目管理 2419分 / 双层拓扑

难度偏高(跳过) 1632 矩阵转换后的排名 2530分 / 并查集+拓扑

难度偏高(跳过) 2603 收集树中金币 2712分 / 复杂树形DP

会员题(跳过) 444 序列重建 会员题

会员题(跳过) 269 / LCR 114 火星词典 会员题

会员题(跳过) 2371 最小化网格中的最大值 会员题

会员题(跳过) 3481 应用替换 会员题

三、在拓扑序上 DP

  • 选作拓扑序DP

分类 题号 题目 备注

基础拓扑DP 851 🟦喧闹和富有 🟦重要 / 刷表法入门

基础拓扑DP 2050 🟦并行课程 III 🟦重要 / 最长路径DP

进阶拓扑DP 1857 🟦有向图中最大颜色值 🟦经典 / 颜色计数DP

会员题(跳过) 1136 并行课程 会员题

难度偏高(跳过) 3620 恢复网络路径 题目信息不完整

以下是对该题单的二次筛选结果,保留最具代表性、难度适中、降低解法重复的题目。

三、最短路

§3.1 单源最短路:Dijkstra 算法

分类 题号 题目 备注

基础入门 743 🟩网络延迟时间 🟩重要 / 标准模板题

基础入门 3341 🟩到达最后一个房间的最少时间 I 🟩重要 / 网格图Dijkstra入门

理解原理 3112 🟩访问消失节点的最少时间 🟩重要 / 理解节点失效时间

设计类 2642 🟩设计可以求最短路径的图类 🟩重要 / Dijkstra类的设计

概率类 1514 🟦概率最大的路径 🟦经典 / 乘积转加法

网格图 1631 🟦最小体力消耗路径 🟦经典 / 多种解法

网格图 778 🟦水位上升的泳池中游泳 🟦经典 / 与1631类似但不同

网格图 2577 🟦在网格图中访问一个格子的最少时间 🟦扩展 / 时间依赖等待

计数类 1976 🟦到达目的地的方案数 🟦经典 / 最短路计数

第二短路径 2045 🟦到达目的地的第二短时间 🟦经典 / BFS也可

K站中转 787 🟦K站中转内最便宜的航班 🟦经典 / 与1928类似,选更经典的

动态规划 1928 🟦规定时间内到达终点的最小花费 🟦扩展 / DP+Dijkstra

赛车 818 🟪赛车 难度偏高 / 状态图BFS+DP

分层图 LCP 35 🟦电动车游城市 🟦经典 / 分层图入门

SPFA/差分约束 2589 🟦完成所有任务的最少时间 🟦扩展 / 差分约束

§3.2 全源最短路:Floyd 算法

Floyd 算法本质是三维 DP。理解 DP 一定要基于空间优化前的写法。

  • 转换字符串的最小成本:这题不能用BFS来做,状态空间很大 。不过可以抽象为最短路来做,先单独求解每一个字符转换的最小成本。因为有多个字符,所以使用多源最短路算法

--

  1. 设计可以求最短路径的图类 1811 动态加边

  2. 阈值距离内邻居最少的城市 1855

  3. 转换字符串的最小成本 I 1882

  4. 关闭分部的可行集合数目 2077

  5. 转换字符串的最小成本 II 2696

四、最小生成树

涉及到 Kruskal 算法和 Prim 算法。前者一般用于稀疏图,后者一般用于稠密图。

  • 一般使用堆优化的Krusal算法
  • 最小带权和的生成树。

--

  1. 连接所有点的最小费用 1858

  2. 升级后最大生成树稳定性 2301 做法不止一种:二分+Krusal算法

  3. 找到最小生成树里的关键边和伪关键边 2572

  4. 最低成本连通所有城市(会员题)

  5. 水资源分配优化(会员题)

七、二分图染色

  • 二分图:两个节点连边。
  • 典型例题:分组织问题

模板(交替染色法):

  1. 判断二分图 1625

  2. 可能的二分法 1795

  3. 最大划分因子 2135:只保留有用的边+二分

相关推荐
_深海凉_1 小时前
LeetCode热题100-二叉树展开为链表
算法·leetcode·链表
ECT-OS-JiuHuaShan1 小时前
什么是认知,认知的本质是什么?
数据库·人工智能·算法·机器学习·数学建模
Black蜡笔小新1 小时前
自动化AI算法训练服务器DLTM:筑牢数据安全底座,赋能企业AI高效安全落地
人工智能·算法·自动化
月殇_木言1 小时前
算法进阶(上)
算法
c++之路1 小时前
外观模式(Facade Pattern)
算法·外观模式
MicroTech20251 小时前
量子退火赋能金融,MLGO微算法科技构建量子金融生态
科技·算法·金融
晨曦中的暮雨1 小时前
4.16滴滴 AIOT 一面|面经
java·算法
BirdenT5 小时前
20260519紫题训练
c++·算法
csdn_aspnet10 小时前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法