有關網路流建模的學習筆記
話說網路流這個東西,其題面的特點就是:就算告訴你這道題是網路流,你也不會做(有點皮)
所以說,dzyo大佬就給我們總結了一些基本模型,感覺打開了通往新世界的大門……
最大匹配
用網路流來解決最大匹配這類問題
首先題目中一般會出現“最多,至多”這類字眼,或者問“是否有一種分配方案滿足條件”
這個時候你就可以思考一下網路流了
考慮一條流就是一種合法方案, 你所需要做的就是確定流量限制以保證一條流流到最後,無論怎麼流都是合法的
如果還有費用什麼的,你就往邊權上加
來一打例題,都是求最大匹配的問題
最小路徑覆蓋
記得很久以前寫過有關這方面的一道例題(覺得自己寫得真好,O(∩_∩)O哈哈~,皮一下)那麼就再上一道例題
然而這個不是重點,重點是最小鏈覆蓋
我之前倒是一直沒搞清楚鏈和路徑的區別是什麼,今天才算是搞清楚了
最小路徑覆蓋:又名最小路徑點覆蓋
最小鏈覆蓋:又名最小路徑可重複點覆蓋
知道其全名過後,總算是搞明白了,鏈的話一個節點可以被覆蓋多次,而路徑的話一個節點只能被覆蓋一次
而有向無環圖的最小路徑可重複點覆蓋,等價於先對有向圖進行傳遞閉包(FLoyd),再在此基礎上求最小路徑點覆蓋
在這裡傳遞閉包起的作用就是將本會重複經過同一點的鏈,現在就不重複走,改成路徑
再感性理解一下,就是假設兩條路都經過i點,按照普通的方法,只能走一次i點。第二個就沒法走了。
所以我們floyd傳遞閉包,直接跳過那個i點,讓兩條路直接相連,那麼就可以忽略那個重複的i點了
dzyo老師說如果存在 x → y,相當於 x 可以跳過 y 去匹配之後的。 在網路流的時候 y ′ 向 y 連邊即可。
但各路大神都沒用這個方法A題,我就先不嘗試這個啦
最長反鏈
最長反鏈是一些點的集合,在這個集合中任意兩個點,互相不能到達
這個東西就當結論記住好啦,那個什麼某D定理(dzyo就是這麼叫的,╭(╯^╰)╮)Dilworth定理,這個怎麼證明的就不糊了
我們記住:最長反鏈 = 最小鏈覆蓋,就好啦.