1. 程式人生 > 其它 >AGC043F Jewelry Box【線性規劃,費用流】

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}\) 次最短路,但是衝就完了。

多路增廣好慢啊啊啊啊