题解 P3163 【[CQOI2014]危桥】
SovietPower✨ · · 题解
这种题大多是多源多汇跑网络流。往返
先不考虑别的,直接按原图建模:危桥建双向边容量为
这样跑出来的最大流会有两个问题(好多题解都没提问题二?):
一是,
二是,危桥只能走一次,但这样可能会正反走两次。
也就是不能直接判断是否满流来判断是否可行。办法是,交换
交换
如果满流且仍然存在问题一那种情况呢?画个图。
假设第一次跑最大流,
a_1\to b_2 的流量为x ,那么b_1\to b_2 的流量为b_n-x ,b_1\to a_2 的流量也是x ,a_1\to a_2 的流量是a_n-x 。而第二次跑最大流,因为是无向图,
a_1\to a_2 和b_2\to b_1 的流量可以不变,还是a_n-x,b_n-x 。那么a_1\to b_2 和b_2\to a_1 的流量也都还是x 。而这两次说明了什么呢,
a_1 可以流到b_1 x 流量,还可以流到b_2 x 流量,同时不影响a_1 与a_2 ,b_1 与b_2 之间的流量。因为是无向图,将a_1\to b_1 的流量反向,就可以得到b_1\to b_2 x 的流量。b_1,b_2 之间的流就合法了。同理
a_1,a_2 之间的流也合法。所以如果交换
b_1,b_2 后仍满流,一定不存在问题一那种情况。
对于问题二,好多题解都没有写也许是太显然了?
假如
a_1\to a_2 正向经过了一座危桥,而b_1\to b_2 反向经过了这座桥,那么交换b_1,b_2 ,以b_2 为起点后,a_1\to a_2,b_2\to b_1 两条路径都是正向通过了这条边,就受到了流量的限制。所以如果仍满流,不存在问题二。
所以两遍最大流就可以了。
代码就不需要放了。。