Martian148's blog Martian148's blog
首页
  • ICPC 算法笔记
  • ICPC 算法题解
  • 体系结构
  • 高等数学
  • 线性代数
  • 概率论与数理统计
  • 具体数学
  • Martian148的奇思妙想
  • 游记
  • 通识课笔记
关于
  • useful 网站
  • 友情链接
  • 分类
  • 归档

Martian148

一只热爱文科的理科生
首页
  • ICPC 算法笔记
  • ICPC 算法题解
  • 体系结构
  • 高等数学
  • 线性代数
  • 概率论与数理统计
  • 具体数学
  • Martian148的奇思妙想
  • 游记
  • 通识课笔记
关于
  • useful 网站
  • 友情链接
  • 分类
  • 归档
  • 线上赛板子(实时更新)
  • 数据结构

  • 数学

  • 计算几何

  • 动态规划

  • 图论

    • 连通性相关
    • 二分图
    • 网络流
    • 差分约束
    • 拆点
      • 结点有流量限制的最大流
    • 欧拉回路
    • 最小斯坦纳树
  • 字符串

  • 杂项

  • 算法笔记
  • 图论
martian148
2024-08-30
目录

拆点

# 拆点

拆点不是一种具体算法,而是一种图论中的重要思想,样用于网络流,用来处理点权或者点的流量限制问题,也适用于分层图

# 结点有流量限制的最大流

把一个节点 uuu 拆成两个节点 u,u′u,u'u,u′ 然后 uuu 承载别的连到这个点的边,u′u'u′ 往别的节点练边

原图是这样的

image.png

拆点后是这样的

image.png

# 分层图最短路

看一个例题

洛谷 P4568「JLOI2011」飞行路线 (opens new window)

有 kkk 次零代价通过一条路径,求总的最小花费

我们可以采用 DP 思想,定义 dis[i][j]dis[i][j]dis[i][j] 表示从起点到 iii,使用看 jjj 次免费通行权限后的最短路径,显然转移方程为

dis[i][j]=min⁡{min⁡{dis[from][j−1]},min⁡{dis[from][j]+w}} dis[i][j]=\min\{\min \{dis[from][j-1] \},\min \{ dis[from][j]+w \}\} dis[i][j]=min{min{dis[from][j−1]},min{dis[from][j]+w}}

其中 fromfromfrom 为 iii 的父节点,www 为这条路的边权,当 j−1≤kj-1\le kj−1≤k 时,dis[from][j]=INFdis[from][j]=INFdis[from][j]=INF

实际上,这个 DP 就相当于把每个节点拆成了 k+1k+1k+1 个节点,然后在分层图上跑最短路

image.png image.png
上次更新: 2025/04/08, 18:03:31
差分约束
欧拉回路

← 差分约束 欧拉回路→

最近更新
01
Java基础语法
05-26
02
开发环境配置
05-26
03
pink 老师 JavaScript 学习笔记
05-26
更多文章>
Theme by Vdoing | Copyright © 2024-2025 Martian148 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式