1 条题解

  • 0
    @ 2025-8-24 21:55:06

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar revenger
    **

    搬运于2025-08-24 21:55:06,当前版本为作者最后更新于2018-04-26 18:34:31,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    看到这道题,我们先来画一下柿子。

    D=(ABC)ATD=(A*B-C)*A^T

    D=i=1n(j=1najbj,ici)aiD=\sum_{i=1}^n(\sum_{j=1}^na_j*b_{j,i}-c_i)*a_i

    $D=\sum_{i=1}^n\sum_{j=1}^na_i*a_j*b_{i,j}-\sum_{i=1}^na_i*c_i$

    柿子画到这里,我们可以看出,对于每个aia_i,选0的时候没有贡献,选1的时候会带来cic_i的损失,但是对于每一个同样选1的aja_j,会带来bj,i+bi,jb_{j,i}+b_{i,j}的贡献。

    结合数据范围n500n\leq500,可以联想到最小割。

    这里我们假设S集是aia_i选0,T集是aia_i选1。一开始我们获得了所有bb的收益,我们要让损失最小化。

    列式子

    (1)bx+by=cx+cy(1)bx+by=c_x+c_y (都选1的时候只有cc的损失)

    (2)ax+ay=bx,x+bx,y+by,x+by,y(2)ax+ay=b_{x,x}+b_{x,y}+b_{y,x}+b_{y,y} (都选0的时候损失为bb数组)

    (3)ax+by+v=bx,x+bx,y+by,x+cy(3)ax+by+v=b_{x,x}+b_{x,y}+b_{y,x}+c_y

    (4)ay+bx+v=by,y+bx,y+by,x+cx(4)ay+bx+v=b_{y,y}+b_{x,y}+b_{y,x}+c_x (一个选1一个选0时损失为bb数组两数之间的收益和对应cc数组收益)

    可以解出对于每一组(x,y)(x,y)

    ax=bx,x+bx,y+by,x2ax=b_{x,x}+\frac{b_{x,y}+b_{y,x}}{2}

    ay=by,y+bx,y+by,x2ay=b_{y,y}+\frac{b_{x,y}+b_{y,x}}{2}

    bx=cxbx=c_x

    by=cyby=c_y

    v=bx,y+by,x2v=\frac{b_{x,y}+b_{y,x}}{2}

    对于每一组(x,y)(x,y),我们需要把割axaxayay的损失累加起来。

    $ax=b_{x,x}+\frac{\sum_{i=1}^n(i!=x)b_{x,i}+b_{i,x}}{2}=\frac{\sum_{i=1}^nb_{x,i}+b_{i,x}}{2}$

    这样建图就非常明显了,为了避免有小数的出现,我们将流量翻倍。

    从源点SS往每个点ii连接流量为bb数组第ii行和第ii列的权值总和的边。

    每个点ii往汇点TT连接流量为ci2c_i*2的边。

    每一对点(i,j)(i,j)之间连流量为bi,j+bj,ib_{i,j}+b_{j,i}的双向边。

    最后答案为$\sum_{i=1}^n\sum_{j=1}^nb_{i,j}-\frac{Maxflow(S,T)}{2}$

    时间复杂度O(Maxflow(n,n2)Maxflow(n,n^2))

    • 1

    信息

    ID
    2922
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者