Stoer-Wagner算法
求无向图全局最小割的一种算法。设一张图((V,E))的点集为(V),边集为(E)。我们说集合(C)是图((V,E))的割,当且仅当(Cin E)且存在(V)的一个划分(S)和(T),使得((u,v)in Ciff uin Sland vin T),一个割的权值(w_C)就是割中边权的和。
考虑一个事实:对于任意两点(s,tin V),在一个割中(s,t)或在同一划分内,或在不同划分内。那么可以先考虑计算(s-t)割,再将(s,t)两点合并((s,t)之间的边消去,连向其它点的边合并)并递归计算即可。
而Stoer-Wagner算法将告诉我们,总存在一对点(s,t)使得(s-t)最小割就是将(t)的所有边割除的情况。
考虑这样找到满足要求的(s,t):设一个点集(V'in V),初始情况下(V')为空。对于不在(V')中的点(u),定义其权值为(w_{V',u}=sum_{vin V'}w_{(u,v)})。如果每次选择(w_u)最大的(u)加入(V')(相同则随意),那么最后两个加入的点就是(s)和(t)((t)为最后一个点)。
证明:只要证对于任意一种(s-t)割(C),都有(w_Cgeq w_{{Vsetminus {t}},t})即可。令(id_{a_k}=k),(C_k={(u,v)in C|id_uleq k, id_vleq k}),(V_k={a_1,a_2,dots,a_k})。将所有点按照加入(V')的顺序排成一个列({a_n}),对于任意一种(s-t)割(C),设其对应的分划为(S,T),我们称满足(n>1land [a_{n-1}in S] eq[a_nin S]),即与前一个点不在一个分划内的点为活跃点,显然(t)为活跃点。对于任意一个活跃点(v),我们证明(w_{C_{id_v}}geq w_{V_{id_v},v})即可。
采用归纳法,对于第一个活跃点(v),不难发现(w_{C_{id_v}}=w_{V_{id_v},v}),对于之后任意活跃点(v),设其前一个活跃点为(u),将(C_{id_v})中的边分为三部分:(C_{id_u}),(u,v)之间的点与(v)的连边(设这个集合为(A)),其他边。那么有:
于是结论成立。
扩展中国剩余定理
显然只需要考虑合并两个同余方程的情况:
第一个方程的通解为(x=a_1+k*b_1,kin mathbb{Z}),代入第二个方程即有(a_1+k*b_1equiv a_2(mod b_2)),改写为(k_1*b_1+k_2*b_2=a_2-a_1),利用扩展欧几里得求解即可。