当前位置: 首页 > news >正文

图论的小技巧和易错点

Part 0 题目

在解题前,需要先明确题目的图的模型:

  1. :题目中的边代表什么?给定的是点权还是边权,如果是点权,应该如何转为边权?边是有向边还是无向边?
  2. :图是简单图吗?是否存在重边或自环,存在重边或自环时应该如何处理?或者它是一棵树?
  3. 规模:题目是否给出了顶点数n nn和边数m mm?还是需要手工计算n nnm mm

Part 1 建图

Part 1.1 邻接表

  1. 为什么要使用邻接表存图,而不是其他方式?
  2. 存入的是代表是否两点连通的01还是边权?

Part 1.2 邻接矩阵

作者不常用,所以没有总结出太多的易错点和技巧……

Part 1.3 链式前向星

  1. 边是否无向,如果是,存边的数组大小是否达到了2 × N 2 \times N2×N
  2. 边的编号是从0 00开始还是1 112 22开始(注意边双连通分量的建图必须从2 22开始)。

Part 2 最短路

Floyd

  1. Floyd 算法一般使用「邻接矩阵」进行存图。

  2. Floyd 的最外层k为什么必须放在最外层?

    解释

    Floyd 算法的主要思想是动态规划,其状态转移方程为:
    d i s i , j = min ⁡ ( d i s i , j , d i s i , k + d i s k , j ) dis_{i,j} = \min(dis_{i,j},\; dis_{i,k} + dis_{k,j})disi,j=min(disi,j,disi,k+disk,j)
    (最短路场景),或在传递闭包场景中的:
    d i s i , j = d i s i , k ∧ d i s k , j dis_{i,j} = dis_{i,k} \land dis_{k,j}disi,j=disi,kdisk,j
    算法必须保证在计算d i s i , j dis_{i,j}disi,j时,所有以1 11k − 1 k-1k1为中间点的最短路径(或传递关系)都已计算。

    若将k kk放入内层循环,可能在更新d i s i , j dis_{i,j}disi,j时,所需的d i s i , k dis_{i,k}disi,kd i s k , j dis_{k,j}disk,j未被正确计算或未计算,导致结果错误。

  3. Floyd 算法可以计算每个节点恰好或至多经过k kk步可达的点集。
    恰好 k 步:初始可达数组d i s disdisk kk次方
    至多 k 步:为每个节点i ii增加一条自环(即d i s i , i = 1 dis_{i,i} = 1disi,i=1),再进行k kk次方。

SPFA

  1. 小心出题人卡 SPFA,SPFA 在某些特殊构造的数据下可能退化为O ( N × M ) O(N \times M)O(N×M)的时间复杂度。

Dijkstra

适用条件

用于无负权边的图。

使用前应明确

  1. 求的是单源最短路还是多源最短路?
  2. 每个点的初值是否足够大?
  3. 源头节点的初值是0 00或是x xx
  4. 边权的含义。

版本

朴素版本:适用于稠密图。
堆优化版本:适用于大多数图。

过程

  1. 更新边权的时候可以直接更新吗,还是像旅行巴士一样有一些限制。

Part 3 其他

其他内容敬请期待…

http://www.cnnetsun.cn/news/3304853.html

相关文章:

  • 光敏传感器控制蜂鸣器
  • GitHub 双仓库策略:保护源码与分发二进制文件的 2 种权限模型对比
  • 混动汽车实训教学的信息化解法:虚拟仿真软件落地实践与深度测评
  • Python 分支与循环完全指南——从 if/else 到 for 循环一网打尽
  • Linux下Docker Compose里运行Nginx故障诊断Shell脚本
  • 多模态大模型驱动CV智能涌现:技术原理与应用实践
  • 项目深度分析报告--来自智谱Agent模式
  • 从零开始学Python:模块导入+range()函数,这是你入门的第一道坎!
  • 梅西要解的不是瑞士防线,而是一只不断收紧的钟
  • L3自动驾驶牌照背后的电子电气架构真相
  • 高匿名/透明代理原理对比——代理类型、匿名级别、X-Forwarded-For、检测方法与代理类型对比表
  • Z变换初值/终值定理:与拉普拉斯变换的4点对比及1个统一视角
  • STM32F446RE与AD7490的高精度数据采集系统设计
  • 现代C++高性能系统开发:从泛型编程到实战优化
  • N-Queen遗传算法Python实战:变异优先的工程化实现
  • ArgoCD 多环境镜像升级:基于 GitOps 的安全 Promotion 实践
  • 工业负载控制方案:TPD2015FN与PIC18F4455实战解析
  • Gemini AI在创业工作流中的集成应用:从市场调研到自动化内容生成
  • BEVFormer在Jetson Orin上的TensorRT部署实战
  • Unitree Go2四足机器人Gazebo仿真:SLAM与Nav2导航全流程实战
  • MCTS 自动驾驶规划实战:泊车场景 3 步构建代价函数与 UCB 调优
  • 湖南vi设计涉及元素、风格及适用场景等要点怎么选
  • ROS C++动态配置实战:构建可热更新的高级发布器与订阅器
  • SOCD Cleaner终极指南:告别游戏输入冲突,开启精准操作新时代 [特殊字符]
  • Razor IMU在ROS小车中的硬件驱动与坐标系对齐实战
  • 高压安全隔离技术:ISOM8710与PIC24FJ128GA310应用解析
  • 高压安全隔离系统设计与ISOM8710应用实践
  • HDMI 与 DisplayPort 对比评测:4K@144Hz 游戏场景下的 5 项关键指标
  • AI无法替代的具身判断:为什么此时此地的活决策不可建模
  • Git 2.45 团队协作实战:从邀请协作者到解决合并冲突的 5 个关键步骤