zoukankan      html  css  js  c++  java
  • 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}) 次最短路,但是冲就完了。

    多路增广好慢啊啊啊啊

  • 相关阅读:
    Confluence 6 配置服务器基础地址示例
    (七)git分支的操作
    (六)最最基本的git操作
    (四)创建表、查看表、插入记录
    (三)数据库基本操作(创建、查询、修改、删除数据库)
    c++第九天
    (五)使用GitHub的前期准备
    (四)github之Git的初始设置
    (三)github之GIT的导入
    (二)github的价值意义篇
  • 原文地址:https://www.cnblogs.com/AThousandMoons/p/14980508.html
Copyright © 2011-2022 走看看