网络流 广义切糕模型
问题形式
有 \(n\) 个整数变量 \(x_{1\sim n}\),满足 \(1\le x_i\le m_i\),其中 \(x_i\) 取 \(j\) 有 \(w(i,j)\) 的代价,\(q\) 组约束 \((u,v,w)\) 表示 \(x_u\le x_v+w\;(w> 0)\),最小化总代价
解法
考虑转化为最小割
对于每个 \(i\) 建立 \(m_i\) 个点 \(p_{i,j}\;(1\le j\le m_i)\),令 \(p_{i,0}=S\),则 \(p_{i,j-1}\) 向 \(p_{i,j}\) 连容量 \(w(i,j)\) 的边,\(p_{i,m_i}\) 向 \(T\) 连容量 \(\infty\) 的边,若割了 \(p_{i,j-1}\) 到 \(p_{i,j}\) 之间的边则表示 \(x_i=j\)
对于每条限制 \((u,v,w)\),等价于要求对于任意 \(i\),\(\forall t>w\),\((p_{u,i+t-1},p_{u,i+t})\) 和 \((p_{v,i-1},p_{v,i})\) 不能同时被割,等价于 \(S\) 与 \(p_{u,i+t}\) 连通 和 \(p_{v,i}\) 与 \(T\) 连通 中至少一个成立,令 \(p_{u,i+t}\) 向 \(p_{v,i}\) 连容量 \(\infty\) 的边
最小割即为答案
时间复杂度 \(O(N^2M)=O((\sum m_i)^2(\sum m_i+q))\)
模板:P3227 [HNOI2013] 切糕
\(n\times m\) 个变量,都在 \([1,r]\) 中,\(x_{i,j}\) 取 \(v\) 的代价为 \(w(i,j,v)\),要求任意两个相邻(上下或左右)的变量的差不超过 \(d\),求最小代价,\(n,m,r\le40\)
直接按上述方式建图即可
时间复杂度 \(O(N^2M)=O((nmr)^3)\)

浙公网安备 33010602011771号