网络流/二分图建模方法小结(不完全)
- 二分图最大匹配:S⟶1X,X⟶1/INFY,Y⟶1TS \stackrel{1}\longrightarrow X,X\stackrel{1/INF}\longrightarrow Y,Y \stackrel{1}\longrightarrow TS⟶1X,X⟶1/INFY,Y⟶1T
- 二分图最小覆盖:选择尽量少的点,使得每条边至少一个端点被覆盖。最小覆盖===最大匹配(原理:最小割)
- 二分图最大独立集:选择尽量多的结点,使得任意两点不相邻。与最小覆盖互补。(X+Y−X+Y-X+Y−最小覆盖)。
- DAG的最小路径覆盖:在图中找尽量少的路径,使得每个结点恰好在一条路径上。
- 不相交路径覆盖:将所有结点拆为XXX结点iii和YYY结点i′i'i′,如果原图有i→ji\rightarrow ji→j,那么加边i→j′i\rightarrow j'i→j′,最小路径覆盖===结点数−-−最大匹配数。
- 可相交路径覆盖:先FloydFloydFloyd求传递闭包,将所有连通的点之间加边,转化为上面的问题。
- 网格模型常见二分图建图方法:
- 按照(r+c)%2(r+c)\%2(r+c)%2为0/10/10/1作为X/YX/YX/Y结点(原理:XXX结点之间/YYY结点之间互不相邻)
- 每行作为XXX结点,每列作为YYY结点
- 最大权闭合子图:给定带权图GGG,求权和最大的点集,使得起点在该点集中的任意边,终点也在该点集。建图方法:将所有正权点与SSS相连,负权点与TTT相连,容量为权值的绝对值,保留原图的边,则最大权闭合子图===正权点的权和−-−最小割
- 固定流量k的最小费用流:增广时检查一下如果flow+a>kflow+a>kflow+a>k,则只增广k−flowk-flowk−flow单位
- 二分图的最大团:选最多点,使得这些点诱导的子图是完全图。最大团===补图的最大独立集
- 二分图最小覆盖/最大独立集输出方案:DFS,从Y列的所有非匹配点出发,依次走非匹配边,匹配边,非匹配边,匹配边…最后以匹配边结尾,并把路径上的点均标记。这样,{ YYY 列未标记+XXX 列标记 }就是最小覆盖,{YYY 列标记+XXX列未标记 } 就是最大独立集。
- 无源无汇有容量上下界网络的可行流:(原理:下界流满+所有点流量守恒,即:将新建的图的所有必要弧合并回原图的这一过程,满足所有边的下界必定流满+++所有点入流量===出流量)
①增加一个附加源和汇S,T。
②把每个节点的∑bu,i\sum{b_{u,i}}∑bu,i和∑bi,v\sum{b_{i,v}}∑bi,v求出来,bbb是指下界。
③对于每个节点,若∑bu,i−∑bi,v>0\sum{b_{u,i}}-\sum{b_{i,v}}>0∑bu,i−∑bi,v>0,则添一条从SSS到iii,容量为∑bu,i−∑bi,v\sum{b_{u,i}}-\sum{b_{i,v}}∑bu,i−∑bi,v的边。
若∑bu,i−∑bi,v<0\sum{b_{u,i}}-\sum{b_{i,v}}<0∑bu,i−∑bi,v<0,则添一条从iii到TTT,容量为∑bi,v−∑bu,i\sum{b_{i,v}}-\sum{b_{u,i}}∑bi,v−∑bu,i的边。
④对于原网络中的点,连一条容量为 c−bc-bc−b 的边。
⑤求从SSS到TTT的最大流,若所有与SSS相连的边或与TTT相连的边都满载,则这是一个可行解,方案为④中所连边的剩余流量+b+b+b。 - 有源汇有容量上下界网络的最大/最小流:先求有源汇的网络有上下界的可行流,这一问题与上面问题的唯一不同在于,并非所有点满足流量守恒,那么,我们连接t→st \rightarrow st→s,下界为000,上界为INFINFINF,就转化为了前述问题。建好图后,运行最大流,这个可行流的大小就是t→st \rightarrow st→s这条边的流量。然后删去t→st \rightarrow st→s这条边(必须删,并且清掉G[s]G[s]G[s]和G[t]G[t]G[t]对应的,若要求最大流,就求s−ts-ts−t最大流,答案就是可行流+{s−ts-ts−t最大流};若要求最小流,就求t−st-st−s最大流答案就是可行流-{t−st-st−s最大流}。
- 费用与流量平方成正比的最小费用流:设流量为xxx时,费用为ax2ax^2ax2。用拆边法,容量为ccc的边拆成ccc条容量均为1的边,费用分别为a,3a,5a,7a...a,3a,5a,7a...a,3a,5a,7a...,转化为最小费用最大流问题。
- 流量不固定的最小费用流:费用关于流量是下凸函数,因此不断增广,直到SPFASPFASPFA中单位流量费用为正时停止。
- 区间k覆盖问题:数轴上有一些左闭右开/左开右闭/左开右开的区间,选出权和最大的区间集,使得数轴上任一点最多被k个选中的区间覆盖。建图:所有的区间(u→v)(u \rightarrow v)(u→v)加边u⟶1,−wvu\stackrel{1,-w}\longrightarrow vu⟶1,−wv,所有相邻点i⟶k,0i+1i\stackrel{k,0}\longrightarrow i+1i⟶k,0i+1
- 最大密度子图:给定一个无向图,要求它的一个子图,使得子图中边数 ∣E∣|E|∣E∣ 与点数 ∣V∣|V|∣V∣ 的比值最大,即最大化:∣E∣∣V∣\frac{|E|}{|V|}∣V∣∣E∣。二分答案为k ,则要求解的问题是:选出一个合适的点集 VVV 和边集 EEE,令(∣E∣−k∗∣V∣)(|E|−k∗|V|)(∣E∣−k∗∣V∣) 取得最大值。所谓“合适”是指满足如下限制:若选择某条边,则必选择其两端点。 建图:以原图的边作为左侧顶点,权值为1;原图的点作为右侧顶点,权值为 −k。若原图中存在边 (u,v)(u,v)(u,v),则新图中添加两条边 ([uv]−>u),([uv]−>v)([uv]−>u),([uv]−>v)([uv]−>u),([uv]−>v),,转换为最大权闭合子图。
- 给定图G=<V,E>G=<V,E>G=<V,E>,初始时111属于AAA,nnn属于BBB,对于点iii,划给 AAA集合得 VAiV_{A_i}VAi分,划给 BBB集合得 VBiV_{B_i}VBi分,对于一条边iii,若它连接两个AAA集合点,得EAiE_{A_i}EAi分,若连接两个BBB集合点,得EBiE_{B_i}EBi分,分别连接A,BA,BA,B点,扣除ECiE_{C_i}ECi分,求最大总得分。建图方法:s⟶VAii,i⟶VBits \stackrel{V_{A_i}}\longrightarrow i,i\stackrel{V_{B_i}}\longrightarrow ts⟶VAii,i⟶VBit ,例外的,s⟶INF1s \stackrel{INF}\longrightarrow 1s⟶INF1,n⟶INFtn \stackrel{INF}\longrightarrow tn⟶INFt,对于原图的每条边,将其转化为容量为EAi2+EBi2+ECi\frac{E_{A_i}}{2}+\frac{E_{B_i}}{2}+E_{C_i}2EAi+2EBi+ECi的双向边,并且对于两个端点,再连边s⟶EAi2i,i⟶EBi2ts \stackrel{\frac{E_{A_i}}{2}}\longrightarrow i,i\stackrel{\frac{E_{B_i}}{2}}\longrightarrow ts⟶2EAii,i⟶2EBit,求出最小割,答案就是∑VAi+∑VBi+∑EAi+∑EBi−\sum{V_{A_i}}+\sum{V_{B_i}}+\sum{E_{A_i}}+\sum{E_{B_i}}-∑VAi+∑VBi+∑EAi+∑EBi−最小割。
- Dilworth定理:对于任意偏序集都有,最大反链(最大独立集)=最小链的划分(最小可相交路径覆盖). 通过Dilworth定理, 我们就可以把偏序集(DAG)的最大独立集问题转化为最小可相交路径覆盖问题了。
- 霍尔定理:二分图G中的两部分顶点组成的集合分别为X,YX, YX,Y(假设有∣X∣≤∣Y∣|X|≤|Y|∣X∣≤∣Y∣)。G中有一组无公共点的边,一端恰好为组成X的点(也就是存在完美匹配)的充分必要条件是:X中的任意k个点至少与Y中的k个点相邻,即对于X中的一个点集W ,令N(W)N(W)N(W)为W的所有邻居, 霍尔定理即对于任意W,∣W∣≤∣N(W)∣|W|≤|N(W)|∣W∣≤∣N(W)∣。推论:假设两边的点集分别为X,Y,则二分图的最大匹配数为∣X∣−max{∣W∣−∣N(W)∣}|X|−max\{|W|−|N(W)|\}∣X∣−max{∣W∣−∣N(W)∣},其中W是X的子集