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

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

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

  • (0=X_{i,0}le X_{i,1}lecdotsle 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 论文,我们可以把它写成:

[minleft{sum_{i,j}(inftymax(X_{i,j}-X_{i,j+1},0)+inftymax(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}inftymax(X_{u,j}-X_{v,k},0)+sum_i(infty X_{i,0}+inftymax(X_{i,0}-X_{i,k_i}+A,0)) ight} ]

好长好长好长好长好长

对偶一下再取反就是最小费用流:所有的 (cmax(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}) 次最短路,但是冲就完了。

多路增广好慢啊啊啊啊

原文地址:https://www.cnblogs.com/AThousandMoons/p/14980508.html