【ECNU OJ】 tag = flows 上部分

Problem #2182EOJ 2182 Dining

 

題目大意:老題了。食物,飲料分配給奶牛,每頭牛有他愛吃和不愛吃的。求怎麼匹配能讓更多牛滿足。

 

思路:

1、只要熟悉網絡流就應該會想到一個 S----T 一類的建圖。每條邊權值爲1,類似於二分圖匹配,然後高高興興地跑了一遍最大流。然後錯了。

 

        2、然後你就開始想這是怎麼回事,在草稿紙上開始畫起了圖。S——A1——B1——C1——T,似乎十分正確。

      

3、驚鴻一瞥,你看到如果存在一頭奶牛,能夠吃兩種套餐的時候,該點有2的流量進,2的流量出,也就是說,一頭牛吃了兩頓大餐,這是我們無法接受的。不能因爲多吃一頓就多算一次。

 

        4、那麼怎麼辦呢?其實很好想,拆點!牛拆成<1——牛2>。牛1留着和之前的食物匹配,牛2留着和飲料匹配。這樣一來,就能保證每頭牛不多吃搶吃了。跑最大流,完畢。

 

 

思考:

        細一看其實就是把兩個二分圖並起來了,姑且把這類題目稱作“二分圖兩次連續最大匹配

 

 

 

 

 

Problem #3400EOJ 3400 Admiral

題目大意:兩條不相交最短路徑和。

 

思路:

1.      按照題目的數據,若聯通,則連一條流量1,費用爲給出的邊。

2.      超級源點源點終點超級終點。流量2,費用0.

3.      最小費用最大流

 

思考:

        對於n條路徑和來說,也是如此。把流量改成n即可

        若要判斷存在性,即判斷流量是否小於n

 

 

 

 

 

 

Problem #3396EOJ 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 #3397EOJ 3397 Dual Core CPU

題目大意:

有兩個集合AB。有一系列元素需要放在A或者B兩個集合其中一個裏。對於任意的元素,放在AB中的開銷不同。另外,有些元素對如果不在一個相同集合裏,會產生額外開銷,求分配元素的最小開銷。

 

 

 

思路:

1、           其實看原題的時候,我第一感覺:難道又是一題費用流?後來發現不對,這道題雖說是在講“開銷”,但題目大意被我這麼抽象地一改動,它其實是在講“集合的分配”。

2、           對於某一元素,要麼在A,要麼在B。題目要求我們要把這堆元素一分爲二,並讓我們求得最小開銷。

3、           “割”:通俗地理解割,就是在一張有源點匯點地網絡流圖中,把它通過某種方式切開,使得分割下來的子圖個個獨立,不再聯通。即割完以後,就會出現兩個獨立集合,一個有A,一個有B
(另:最大流 = 最小割不做證明)

4、           通過割的思想,我們初步觀察,如果不考慮元素對的影響,這個題目的一種解法就是把AB集合看成源點匯點,與每個元素都連一條邊,流量爲開銷大小。跑最大流出解

5、           接下來思考如何處理元素對:(由直覺:兩點連邊)
我們要所考慮的是,在割的過程中,讓元素對“切不乾淨”。按常理,比如a->A,b->B只要分別咔嚓左一刀右一刀就結束了。但是因爲我們想讓它切不乾淨,需要補一刀才行,就可以在a,b節點中在練一條邊,流量大小爲元素對的開銷。這樣一來,如果是左右一刀切,不會產生粘連現象(雖然內部粘着,但是我們切的時候是隻看外表的)。但是如果左一刀右一刀,就會產生粘連現象,需要額外的開銷。

6、           到此,整個構圖完畢,求最小割,跑最大流,結束。

 

 

歸類:

1.      最小割 2.獨立集合分配問題

 

 

 

 

Problem #3402EOJ 3402 最大獲利

題目:

新的技術正衝擊着手機通訊市場,對於各大運營商來說,這既是機遇,更是挑戰。THU 集團旗下的 CS&T 通訊公司在新一代通訊技術血戰的前夜,需要做太多的準備工作,僅就站址選擇一項,就需要完成前期市場研究、站址勘測、最優化等項目。

在前期市場調查和站址勘測之後,公司得到了一共N 個可以作爲通訊信號中轉站的地址,而由於這些地址的地理位置差異,在不同的地方建造通訊中轉站需要投入的成本也是不一樣的,所幸在前期調查之後這些都是已知數據:

  • 建立第 i 個通訊中轉站需要的成本爲 Pi (1≤iN)。
  • 公司調查得出了所有期望中的用戶羣,一共 M 個。關於第 i 個用戶羣的信息概括爲 Ai,Bi,Ci:這些用戶會使用中轉站 Ai 和中轉站 Bi 進行通訊,公司可以獲益 Ci。(1≤iM,1≤Ai,BiN)

THU 集團的 CS&T 公司可以有選擇的建立一些中轉站(投入成本),爲一些用戶提供服務並獲得收益(獲益之和)。那麼如何選擇最終建立的中轉站才能讓公司的淨獲利最大呢?

 

 

思路.

1.      獲利 = 收益 - 投入

2.      最大權閉合圖

3.     把用戶羣和中轉站看成n+m個點,每個點有一個權值,用權值的正負表示獲利還是花費。

4.     滿足用戶羣vi,必須建造AiBi,連邊<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

 

對這類模型不夠了解透徹。

 

 

(上)結束。

 有源碼,懶得傳。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章