ARC129E Yet Another Minimization 题解 【网络流笔记】

Link
超神的建模,极其有借鉴意义/cy
注:该建模对应于最小割建模

对于 n 个数,每个数有 m 种取值的技巧

i=1,2,,n,令 S=Vi,0Vi,1Vi,m=T,也就是形成 n 条链。
此时,i 取值 j 时对应着切断边 Vi,j1Vi,j,因此这条边可以附上权值 ci,j
注意,这时候我们还要连一条 Vi,jVi,j1 的边,边权为 +。理由如下:

我们会发现上面那条链断了 3 条边,由于有其它边的介入,左边跑到 T 一边了,右边跑到 S 一边了,这显然不符合我们的期望。

而加上无穷大的边后————

发现 ST 连通了,显然与最小割不符。于是可以保证每条链左边属于 S,右边属于 T

另外,如果一条链断了 3 条边,则 3 条小链中必有两个同属于 ST,它们之间的边就没必要断了,与最小性不符。

至此,我们可以保证每条链恰好断一条边,其代价对应于选相应元素的代价,且左边属于 S,右边属于 T

处理不同数所选值之间关系的技巧

本题中要求对于数 ij,会产生 |xixj|Wi,j 的代价。

不妨设 xi<xj(反之类似),则代价即为 a[xia<xj]Wi,j

于是考虑对每个 a 连一条代价为 Wi,j 的边。

xi,xj 进行归并排序,则相邻两个数之间的 a 可以合并,于是只有 O(m) 条边。

举一个 xia<xj 的例子:

可以看到图中 x2<y3,即 x2a<y3,此时上面那条链可以切蓝色的边,下面那条链可以切紫色的边,于是此时是y2x2 连一条边,边权为 y3x2

注意一下谁往谁连边即可,注意权值差也有可能是 xkxk1,需要取一个 max

本文作者:CharlieVinnie

本文链接:https://www.cnblogs.com/Charlie-Vinnie/p/16552499.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   CharlieVinnie  阅读(106)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起