AGC043F Jewelry Box【线性规划,费用流】

因为要满足差分约束,显然确定了每家店的珠宝之后必定按重量从小到大的顺序装盒。

将同一家店的珠宝按重量排序,设 \(X_{i,j}\) 表示 \((i,0),(i,1),\cdots,(i,j-1)\) 的购买数量,则限制为:

  • \(0=X_{i,0}\le X_{i,1}\le\cdots\le X_{i,k_i}=A\)
  • \(X_{i,j+1}-X_{i,j}\le C_{i,j}\)
  • 对于限制 \((U,V,W)\) 和珠宝 \((U,j)\),设 \(k\) 是最大满足 \(S_{V,k}\le S_{U,j}+W_i\),则 \(X_{U,j}\le X_{V,k}\)

最小化 \(\sum P_{i,j}(X_{i,j+1}-X_{i,j})\)

根据 dxm 论文,我们可以把它写成:

\[\min\left\{\sum_{i,j}(\infty\max(X_{i,j}-X_{i,j+1},0)+\infty\max(X_{i,j+1}-X_{i,j}-C_{i,j},0)+P_{i,j}\max(X_{i,j+1}-X_{i,j},0))+\sum_{u,v,w,j}\infty\max(X_{u,j}-X_{v,k},0)+\sum_i(\infty X_{i,0}+\infty\max(X_{i,0}-X_{i,k_i}+A,0))\right\} \]

好长好长好长好长好长

对偶一下再取反就是最小费用流:所有的 \(c\max(X_v-X_u-w,0)\) 看做 \(u\)\(v\) 连容量为 \(c\),费用为 \(w\) 的边,\(\infty X_{i,0}\) 表示 \((i,0)\) 的流量没有限制,具体计算的时候需要一个源点 \(S\) 和一个汇点 \(T\),所以把 \((i,0)\) 连出的看做 \(S\),连向 \((i,0)\) 的看做 \(T\)

然后就做完一组数据的情况了。观察一下发现 \(A\) 的系数一定是总流量 \(F\),所以答案即为 \(\min\{AF-C\}\),其中 \(C\) 表示将 \(A\) 看做 \(0\) 时跑的最小费用流答案,所以我们跑出所有 \((F,C)\) 的对应关系,根据费用流性质,这是下凸的分段一次函数,用最小费用最大流的方法计算出折线端点和斜率,询问的时候二分斜率对应位置即可。

复杂度大概是 \(\sum P_{i,j}\) 次最短路,但是冲就完了。

多路增广好慢啊啊啊啊

posted @ 2021-07-07 10:47  mizu164  阅读(296)  评论(0编辑  收藏  举报