1. 程式人生 > >有關網路流建模的學習筆記

有關網路流建模的學習筆記

話說網路流這個東西,其題面的特點就是:就算告訴你這道題是網路流,你也不會做(有點皮)

所以說,dzyo大佬就給我們總結了一些基本模型,感覺打開了通往新世界的大門……

 

最大匹配

用網路流來解決最大匹配這類問題

首先題目中一般會出現“最多,至多”這類字眼,或者問“是否有一種分配方案滿足條件”

這個時候你就可以思考一下網路流了

考慮一條流就是一種合法方案, 你所需要做的就是確定流量限制以保證一條流流到最後,無論怎麼流都是合法的

如果還有費用什麼的,你就往邊權上加

來一打例題,都是求最大匹配的問題

dining                             

football match                              PIGS

candy                              how many shortest paths       

 

 

最小路徑覆蓋

記得很久以前寫過有關這方面的一道例題(覺得自己寫得真好,O(∩_∩)O哈哈~,皮一下)那麼就再上一道例題

然而這個不是重點,重點是最小鏈覆蓋

我之前倒是一直沒搞清楚鏈和路徑的區別是什麼,今天才算是搞清楚了

最小路徑覆蓋:又名最小路徑點覆蓋

最小鏈覆蓋:又名最小路徑可重複點覆蓋

知道其全名過後,總算是搞明白了,鏈的話一個節點可以被覆蓋多次,而路徑的話一個節點只能被覆蓋一次

有向無環圖的最小路徑可重複點覆蓋,等價於先對有向圖進行傳遞閉包(FLoyd),再在此基礎上求最小路徑點覆蓋

在這裡傳遞閉包起的作用就是將本會重複經過同一點的鏈,現在就不重複走,改成路徑

再感性理解一下,就是假設兩條路都經過i點,按照普通的方法,只能走一次i點。第二個就沒法走了。

所以我們floyd傳遞閉包,直接跳過那個i點,讓兩條路直接相連,那麼就可以忽略那個重複的i點了

例題來一道

 

dzyo老師說如果存在 x → y,相當於 x 可以跳過 y 去匹配之後的。 在網路流的時候 y ′ 向 y 連邊即可。

但各路大神都沒用這個方法A題,我就先不嘗試這個啦

 

最長反鏈

最長反鏈是一些點的集合,在這個集合中任意兩個點,互相不能到達

這個東西就當結論記住好啦,那個什麼某D定理(dzyo就是這麼叫的,╭(╯^╰)╮)Dilworth定理,這個怎麼證明的就不糊了

我們記住:最長反鏈 = 最小鏈覆蓋,就好啦.

例題