1 条题解

  • 0
    @ 2025-8-24 21:45:58

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar SovietPower✨
    因你而起的一泓喜悲 权当年轻 留个纪念

    搬运于2025-08-24 21:45:58,当前版本为作者最后更新于2019-01-02 08:04:38,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    这种题大多是多源多汇跑网络流。往返an/bna_n/b_n次可以看做去an/bna_n/b_n次,直接把危桥能走的次数看做11

    先不考虑别的,直接按原图建模:危桥建双向边容量为11,普通桥容量为INFINF;然后源点SSa1,b1a_1,b_1分别连容量an,bna_n,b_n的边,a2,b2a_2,b_2分别向汇点TT连容量an/bna_n/b_n的边。

    这样跑出来的最大流会有两个问题(好多题解都没提问题二?):

    一是,b2Tb_2\to Tbnb_n的一部分流量可能是来自a1a_1的,同理a2Ta_2\to T的一些流量可能来自b1b_1

    二是,危桥只能走一次,但这样可能会正反走两次。

    也就是不能直接判断是否满流来判断是否可行。办法是,交换b1,b2b_1,b_2SSb2b_2b1b_1TT),重新建图,再跑最大流。只有两次均满流才一定存在可行方案。

    交换b1,b2b_1,b_2后再判断是否满流,如果你觉得问题一显然已经被解决了可以跳过下面这段。

    如果满流且仍然存在问题一那种情况呢?画个图。

    假设第一次跑最大流,a1b2a_1\to b_2的流量为xx,那么b1b2b_1\to b_2的流量为bnxb_n-xb1a2b_1\to a_2的流量也是xxa1a2a_1\to a_2的流量是anxa_n-x

    而第二次跑最大流,因为是无向图,a1a2a_1\to a_2b2b1b_2\to b_1的流量可以不变,还是anx,bnxa_n-x,b_n-x。那么a1b2a_1\to b_2b2a1b_2\to a_1的流量也都还是xx

    而这两次说明了什么呢,a1a_1可以流到b1b_1 xx流量,还可以流到b2b_2 xx流量,同时不影响a1a_1a2a_2b1b_1b2b_2之间的流量。因为是无向图,将a1b1a_1\to b_1的流量反向,就可以得到b1b2b_1\to b_2 xx的流量。b1,b2b_1,b_2之间的流就合法了。

    同理a1,a2a_1,a_2之间的流也合法。

    所以如果交换b1,b2b_1,b_2后仍满流,一定不存在问题一那种情况。

    对于问题二,好多题解都没有写也许是太显然了?

    假如a1a2a_1\to a_2正向经过了一座危桥,而b1b2b_1\to b_2反向经过了这座桥,那么交换b1,b2b_1,b_2,以b2b_2为起点后,a1a2,b2b1a_1\to a_2,b_2\to b_1两条路径都是正向通过了这条边,就受到了流量的限制。

    所以如果仍满流,不存在问题二。

    所以两遍最大流就可以了。

    代码就不需要放了。。

    • 1

    信息

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