1. 程式人生 > >網路流建圖模板及基本理論

網路流建圖模板及基本理論

sgu194 zoj3229 sgu176 zoj1994 zoj3496

主要是針對有上下界的網路流建圖。

有上下界的網路流建圖模板:

{
流量上下限的無源匯的可行流建圖方法:
對於有流量上下限的無源的網路流的可行流轉化為一般的有源匯點的最大流來做
(1)新增超級源點S和超級匯點T
(2)對於原有的邊(u,v,l(u,v),c(u,v))(l為流量下限,c為流量上限),新增邊(u,v,0,c-l);
(3)對於每個結點i,記w[i]=sum(l(u,i))-sum(l(i,v));//進來的的下界流量-出去的下界流
量,若w[i]>0,新增邊(S,i,w[i]),若w[i]<0,新增邊(i,T,-w[i]);
(4)求解S-T的最大流;
(5)當且僅當S的出邊和T的入邊滿流,原流量限制的無源網路流可行流有解;
(6)一組可行流的解為:
對於每條流量邊(u,v),可行流量為l(u,v)+其構造的圖中的流量.
  
1.u到v建容量為C[u,v]-B[u.v]的邊 //C是上界,B是下界
2.對於點u,記tmp為in[u]-ou[u],若tmp>0,則S向u建容量為tmp的邊,若tmp<0,則u向T建邊
,容量是-tmp。//in[u]記錄u的入邊的流量下界和,ou[u]記錄u的出邊的流量的下界和
若滿流,則有解

流量上下限的有源匯的網路流(最大流)建圖方法:
從匯點向源點建一條容量為INF的邊,超級源點連i(w[i]>0),i連向超級匯點(w[i]<0),
對超級源點和超級匯點跑一次最大流,當maxflow=(w[i]>0)的和時,則有可行流,即有解。
有解就刪除超級源點和匯點(超級源點和超級匯點之間的流量設成0,或者刪除點),再對源
點和匯點跑一次最大流maxflow=(第一次流滿下界的流+第二次能流通的自由流)


流量有上下限的有源匯的最小流建圖:

1.u到v建容量為C[u,v]-B[u.v]的邊 //C是上界,B是下界
2.對於點u,記tmp為in[u]-ou[u],若tmp>0,則S向u建容量為tmp的邊,若tmp<0,則u向T建邊
,容量是-tmp。//in[u]記錄u的入邊的流量下界和,ou[u]記錄u的出邊的流量的下界和

先跑一遍最大流,然後源點和匯點連一條容量為inf的邊,再跑一遍最大流,就是解
}


最大權閉合圖解法:源點向正權點連邊對應點權值,原圖邊容量inf,負權點向匯點連邊權值
絕對值,ans=正權和-最大流。 

最大流=最小割(邊)=最小割(點)

以後自己還會逐漸更新。