zoukankan      html  css  js  c++  java
  • ctsc2009 移民站选址

     

    分析:非常非常好的一道题!

    首先需要对问题进行转化:

    1. 行列无关,对于行单独处理,对于列单独处理
    2. 必然存在一个最优方案使得每一个新站与旧站重合.

    转化1很显然,对于转化2,是一类非常经典的“中位数问题”,即在一条线段上,有若干个特殊点,要选择一个点的位置,使得它到这些点距离*对应权值的和最小. 结论就是这个点一定在给定的这些点的位置上.

    那么问题可以变成,m个位置,每个有n种选择,代价即为其与旧站的传输代价和。不同位置间的选择也会带来代价.

    首先假设我们不知道这道题要用网络流来做. dp? Emm,这怎么设计状态啊,要状压吗? 明显压不下. 贪心,肯定不行. 这道题涉及到“匹配”,自然就是网络流咯.

    费用流可以吗?显然是不行的,旧站与新站之间的费用很好处理,但是新站与新站之间的费用不好处理.

    那就只有是最大流咯. 用流量表示费用?这怎么表示啊......

    那么锁定方法--最小割!

    每个位置有多种选择,注意到这句话,可以往两个方面去想:

    1. 把选择看作点.
    2. 将每个位置拆成选择个数个点.

    本题如果要用最小割显然不能用第一种方法.因为选择与选择之间不好处理,那么就用第二种方法.

    上面所画的就是建图方式.具体说来,就是S连向每个点拆出来的第一个点,容量为inf,每个点拆出来的最后一个点连向T,容量为inf.

    对于第i个点拆出的第k个点连向第i个点拆出的第k+1个点,容量为第i个新站建在第k个旧站的代价.

    对于第i个点拆出的第k个点连向第j个点拆出的第k个点,容量为b_ij.

    下面来分析一下建图:

    割掉第i个点拆出来的点实际上就是确定了第i个新站的位置. 如上图所示,如果同时割掉两条红色的边,为了使得S,T不连通,必然会割掉两条绿色的边. 如果i的选择是pi,j的选择是pj,一共会割掉 |pi - pj|条绿边,正好就是新站i,j之间的代价.

    至此这道题就做完了.

    一点感想:最小割为了使得ST不连通,一次能够割掉很多条边.如果网络流的题要求很多的贡献(两两之间的).尝试用最小割?

  • 相关阅读:
    关于Xil_Assert断言产生的死循环,导致程序未执行的问题
    Unable to connect to ps7_cortexa9的参考解决方案Zedboard,zynq
    Xilinx SDK下载时出现的几个问题总结
    深入分析SCU GIC驱动 1 ZEDBOARD,ZYNQ7000
    Git命令行介绍和使用说明(持续更新)
    常用快捷键—Webstorm入门指南
    数组和链表的关系
    把Sublime Text 2固定到Ubuntu启动器
    Node的Eclipse插件 Nodeclipse
    Sublime 自定义格式化快捷键
  • 原文地址:https://www.cnblogs.com/zbtrs/p/8612945.html
Copyright © 2011-2022 走看看