网络流真的是很不错的算法,因为它富有想象力

最小路径覆盖问题

考虑把原问题等价一种网络流的最终态。
假设初始每个点单独为一条路径。考虑合并路径(前提为首尾相接)。路径数为\(n\)减合并次数。
把每个点拆成入点\(x_i\)和出点\(y_i\),把有向边\((u,v)\),连边:\(x_u\)\(y_v\)。如果这条边有流量意味着选择了这条边,同时也限定着每个点只能作一次出点和一次入点。

方格取数问题(不共存条件的最小割问题)

给了很多对不共存的位置,每个位置有权值。问满足条件下最大总权值。
可以先全选,考虑删最少权值使得满足条件。
而这道题有特殊性:不共存的点可以分别存在于两部分。比如说将不共存的每对连边,可以构成二分图。
因此两组点分别向起点和终点连边,边权权值。共存的点连边,边权inf。

最长不下降子序列问题

网络流模拟动态规划
\(i\)为起点的最长不降子序列长度 \(f(i)\)。设最长上升子序列为\(K\)
同样每个点拆成两个点,中间边权为选的次数上限。
起点连向\(f(i)=1\)的点,同理\(f(i)=K\)的连向重点。
然后斜着连转移边。

【SRM577】BoardPainting

用最少数目的直上直下的不重叠联通块覆盖棋盘。
转化:合并次数尽量多。限制(不能出现拐着的棋盘)
构三类点:棋盘上的块,横着相邻,纵着相邻。
相邻合并的节点连接所合并的两个点,边权都为inf。
然后\(S\)连横,纵连\(T\)
最后会割掉不合并的相邻块,且使得\(S\)\(T\)不连通(不连通限制了一个点要么被横着合并,要么被纵着合并)

割成两类,限制类别给贡献(CF311E)。

限制点集里的点都为\(S\)类,建立一个该限制的虚拟节点,连起点(权值为不满足的代价),连向限制点集合边权为inf。
每个点本身连向自己所属的类,边权为\(v_i\)

最大权闭合子图

  • 闭合子图:满足点集里每个点若选择了,它出边所到的点也必须选择的图
  • 求解:最小割
    \(S\)连每个正权结点,边权为正权。负权连\(T\),边权为点权绝对值。其它表示逻辑关系的边权为inf。
    一组割集,把图分成两部分,发现跟\(S\)联通的部分为一个闭合子图,所以割集跟闭合子图构成了双射。
    \(ans=正权和-|负权和|=所有正权和-(不选的正权和+负权和)=所有正权和-最小割集和\)