Problem #2182:EOJ 2182 Dining
題目大意:老題了。食物,飲料分配給奶牛,每頭牛有他愛吃和不愛吃的。求怎麼匹配能讓更多牛滿足。
思路:
1、只要熟悉網絡流就應該會想到一個 S-水-牛-飯-T 一類的建圖。每條邊權值爲1,類似於二分圖匹配,然後高高興興地跑了一遍最大流。然後錯了。
2、然後你就開始想這是怎麼回事,在草稿紙上開始畫起了圖。S——A1——B1——C1——T,似乎十分正確。
3、驚鴻一瞥,你看到如果存在一頭奶牛,能夠吃兩種套餐的時候,該點有2的流量進,2的流量出,也就是說,一頭牛吃了兩頓大餐,這是我們無法接受的。不能因爲多吃一頓就多算一次。
4、那麼怎麼辦呢?其實很好想,拆點!牛拆成<牛1——牛2>。牛1留着和之前的食物匹配,牛2留着和飲料匹配。這樣一來,就能保證每頭牛不多吃搶吃了。跑最大流,完畢。
思考:
細一看其實就是把兩個二分圖並起來了,姑且把這類題目稱作“二分圖兩次連續最大匹配”
Problem #3400:EOJ 3400 Admiral
題目大意:兩條不相交最短路徑和。
思路:
1. 按照題目的數據,若聯通,則連一條流量1,費用爲給出的邊。
2. 超級源點連源點,終點連超級終點。流量2,費用0.
3. 跑最小費用最大流。
思考:
對於n條路徑和來說,也是如此。把流量改成n即可
若要判斷存在性,即判斷流量是否小於n
Problem #3396:EOJ 3396 度度熊的交易計劃
題目(中文直接放題目):
度度熊參與了喵哈哈村的商業大會,但是這次商業大會遇到了一個難題:
喵哈哈村以及周圍的村莊可以看做是一共由 n個片區,m條公路組成的地區。由於生產能力的區別,第 i個片區能夠花費 ai元生產 1 個商品,但是最多生產 bi個。同樣的,由於每個片區的購買能力的區別,第 i個片區也能夠以 ci的價格出售最多 di個物品。
由於這些因素,度度熊覺得只有合理的調動物品,才能獲得最大的利益。據測算,每一個商品運輸 1 公里,將會花費 1 元。那麼喵哈哈村最多能夠實現多少盈利呢?
思路:
1. 題目中涉及了兩個量,一個叫商品,一個叫價格。大致意思也就是說在有限的商品下,合適分配,從而獲得最大收益。
2. 每個點都有一定的性質:都能產出商品,都能賣出商品,並且都有限。然後思考在單點情況下的構圖。如何做到呢?
源點S—>當前點P 構造一條邊,流量爲bi(生成bi最多)價格爲ai(生產1個單位需要ai元)
當前點P—>匯點S 構造一條邊,流量爲di(賣出di最多)價格爲ci(賣一個可以賺ci元)
3. 這時候思考,必然ci ai有一個爲負數,講道理來說,應該是ai是負數,因爲是耗錢。然而我們需要的是最小費用最大流,那怎麼辦呢?取反。所以我們將連向匯點的邊權從ci變成-ci,而ai保持不變。
4. 然後在思考城鎮運輸的情況。首先,道路運輸沒有負載,所以加邊必定是無限流量,然後,運送時每單位商品消耗價格與城鎮距離成正比,所以邊權時應該是一個負數,值爲城鎮距離長度。但我們因爲進行了取反操作,所以城鎮之間連一條流量無限,費用爲距離的邊(雙向)。
5. 然後再跑最小費用可行流。
6. 將獲得的答案取反(成爲了最大費用可行流)
注:什麼是可行流?其實就是跑最小費用流,但你跑着跑着你會發現從某條路徑開始起,你開始虧錢了。那是不能接受的,虧錢就停了。
Problem #3397:EOJ 3397 Dual Core CPU
題目大意:
有兩個集合A,B。有一系列元素需要放在A或者B兩個集合其中一個裏。對於任意的元素,放在A和B中的開銷不同。另外,有些元素對如果不在一個相同集合裏,會產生額外開銷,求分配元素的最小開銷。
思路:
1、 其實看原題的時候,我第一感覺:難道又是一題費用流?後來發現不對,這道題雖說是在講“開銷”,但題目大意被我這麼抽象地一改動,它其實是在講“集合的分配”。
2、 對於某一元素,要麼在A,要麼在B。題目要求我們要把這堆元素一分爲二,並讓我們求得最小開銷。
3、 “割”:通俗地理解割,就是在一張有源點匯點地網絡流圖中,把它通過某種方式切開,使得分割下來的子圖個個獨立,不再聯通。即割完以後,就會出現兩個獨立集合,一個有A,一個有B。
(另:最大流 = 最小割不做證明)
4、 通過割的思想,我們初步觀察,如果不考慮元素對的影響,這個題目的一種解法就是把A,B集合看成源點匯點,與每個元素都連一條邊,流量爲開銷大小。跑最大流出解
5、 接下來思考如何處理元素對:(由直覺:兩點連邊)
我們要所考慮的是,在割的過程中,讓元素對“切不乾淨”。按常理,比如a->A,b->B只要分別咔嚓左一刀右一刀就結束了。但是因爲我們想讓它切不乾淨,需要補一刀才行,就可以在a,b節點中在練一條邊,流量大小爲元素對的開銷。這樣一來,如果是左右一刀切,不會產生粘連現象(雖然內部粘着,但是我們切的時候是隻看外表的)。但是如果左一刀右一刀,就會產生粘連現象,需要額外的開銷。
6、 到此,整個構圖完畢,求最小割,跑最大流,結束。
歸類:
1. 最小割 2.獨立集合分配問題
Problem #3402:EOJ 3402 最大獲利
題目:
新的技術正衝擊着手機通訊市場,對於各大運營商來說,這既是機遇,更是挑戰。THU 集團旗下的 CS&T 通訊公司在新一代通訊技術血戰的前夜,需要做太多的準備工作,僅就站址選擇一項,就需要完成前期市場研究、站址勘測、最優化等項目。
在前期市場調查和站址勘測之後,公司得到了一共N 個可以作爲通訊信號中轉站的地址,而由於這些地址的地理位置差異,在不同的地方建造通訊中轉站需要投入的成本也是不一樣的,所幸在前期調查之後這些都是已知數據:
- 建立第 i 個通訊中轉站需要的成本爲 Pi (1≤i≤N)。
- 公司調查得出了所有期望中的用戶羣,一共 M 個。關於第 i 個用戶羣的信息概括爲 Ai,Bi,Ci:這些用戶會使用中轉站 Ai 和中轉站 Bi 進行通訊,公司可以獲益 Ci。(1≤i≤M,1≤Ai,Bi≤N)
THU 集團的 CS&T 公司可以有選擇的建立一些中轉站(投入成本),爲一些用戶提供服務並獲得收益(獲益之和)。那麼如何選擇最終建立的中轉站才能讓公司的淨獲利最大呢?
思路.
1. 獲利 = 收益 - 投入
2. 最大權閉合圖
3. 把用戶羣和中轉站看成n+m個點,每個點有一個權值,用權值的正負表示獲利還是花費。
4. 滿足用戶羣vi,必須建造Ai和Bi,連邊<vi, Ai>, <vi, Bi>。
5. 得到一副圖,而本題所求的最大獲利顯然就是最大權閉合圖的權。
6. 於是,s連到每個用戶羣vi,權值爲Ci,每個中轉站ui連到t,權值爲花費Pi,原圖中<vi, Ai>,<vi, Bi>的權值全部設爲INF。
7. 最大權閉合圖的的權 = 原圖中權值爲正的點的和(所有用戶的收益之和) - 最小割(最大流)
感覺講不來了參考:http://blog.csdn.net/u011265346/article/details/43053193
對這類模型不夠了解透徹。
(上)結束。
有源碼,懶得傳。