一开始想了一发费用流做法然后直接出负环了
首先,比较显然的思路就是对于原图中没有限制的边,对应的流量就是\(inf\),如果是危桥,那么流量就应该是\(2\)。
由于存在两个起始点,我们考虑直接\(s->a_1,s->b_1\)
然后对于终点,\(a_2->t,b_2->t\)
流量分别是次数的两倍!
(因为往返相当于跑双倍的单程)
然后跑最大流,看一下流量是不是\((2\times (a_n+b_n))\)
但是这样会存在一个瑕疵。就是跑出来的路径是\(a_1->b_2\)
那么这时候,我们选择交换\(b_1和b_2\)的位置,然后重新建图跑最大流。
如果流量还是那个值,那就是\(yes\)。
这是为什么呢?如果两次都是等于\(2\times (a_n+b_n)\),那么只存在两种情况,要么是\(a_1->a_2\)是可行的,要么就是存在\(b1->a1->b2\)这样一条路径且路径的流量是\(2*b_n\),另一边同理。
所以当两次的流量都是合法的时候,那么一定就是\(Yes\),否则就是\(No\)
#include
#include
#include
#include
#include
#include
#include