网络流真的是很不错的算法,因为它富有想象力
最小路径覆盖问题
考虑把原问题等价一种网络流的最终态。
假设初始每个点单独为一条路径。考虑合并路径(前提为首尾相接)。路径数为减合并次数。
把每个点拆成入点和出点,把有向边,连边:到。如果这条边有流量意味着选择了这条边,同时也限定着每个点只能作一次出点和一次入点。
方格取数问题(不共存条件的最小割问题)
给了很多对不共存的位置,每个位置有权值。问满足条件下最大总权值。
可以先全选,考虑删最少权值使得满足条件。
而这道题有特殊性:不共存的点可以分别存在于两部分。比如说将不共存的每对连边,可以构成二分图。
因此两组点分别向起点和终点连边,边权权值。共存的点连边,边权inf。
最长不下降子序列问题
网络流模拟动态规划
求为起点的最长不降子序列长度 。设最长上升子序列为。
同样每个点拆成两个点,中间边权为选的次数上限。
起点连向的点,同理的连向重点。
然后斜着连转移边。
【SRM577】BoardPainting
用最少数目的直上直下的不重叠联通块覆盖棋盘。
转化:合并次数尽量多。限制(不能出现拐着的棋盘)
构三类点:棋盘上的块,横着相邻,纵着相邻。
相邻合并的节点连接所合并的两个点,边权都为inf。
然后连横,纵连。
最后会割掉不合并的相邻块,且使得、不连通(不连通限制了一个点要么被横着合并,要么被纵着合并)
割成两类,限制类别给贡献(CF311E)。
限制点集里的点都为类,建立一个该限制的虚拟节点,连起点(权值为不满足的代价),连向限制点集合边权为inf。
每个点本身连向自己所属的类,边权为。
最大权闭合子图
- 闭合子图:满足点集里每个点若选择了,它出边所到的点也必须选择的图
- 求解:最小割
将连每个正权结点,边权为正权。负权连,边权为点权绝对值。其它表示逻辑关系的边权为inf。
一组割集,把图分成两部分,发现跟联通的部分为一个闭合子图,所以割集跟闭合子图构成了双射。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人