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


    超神的建模,极其有借鉴意义/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

  • 相关阅读:
    A Simple Problem with Integers (线段树模板)
    nuc flycontroler dimension
    nginx&tomcat笔记
    Redis 的几种集群对比
    分支对代码性能的影响和优化
    C语言函数体 计算10个学生的平均成绩
    物联网开发自学的一些建议
    python diffusers StableDiffusionXLPipeline 离线使用
    HBase在大数据集群的安装部署及整合Phoenix
    雷达人体存在感应器方案,智能物联网感知技术,实时感应人体存在
  • 原文地址:https://www.cnblogs.com/Charlie-Vinnie/p/16552499.html