1. 程式人生 > >[BZOJ5251][九省聯考2018]劈配(網絡流)

[BZOJ5251][九省聯考2018]劈配(網絡流)

整數 limit 沒有 開始 ems 舉例 我們 led ans

5251: [2018多省省隊聯測]劈配

Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 33 Solved: 22
[Submit][Status][Discuss]

Description

一年一度的綜藝節目《中國新代碼》又開始了。 Zayid從小就夢想成為一名程序員,他覺得這是一個展示自己的舞臺,於是他毫不猶豫地報名了。 題目描述 輕車熟路的Zayid順利地通過了海選,接下來的環節是導師盲選,這一階段的規則是這樣的: 總共n名參賽選手(編號從1至n)每人寫出一份代碼並介紹自己的夢想。接著由所有導師對這些選手進行排名。 為了避免後續的麻煩,規定不存在排名並列的情況。 同時,每名選手都將獨立地填寫一份誌願表,來對總共m位導師(編號從1至m)作出評價。 誌願表上包含了共m檔誌願。 對於每一檔誌願,選手被允許填寫最多C位導師,每位導師最多被每位選手填寫一次(放棄某些導師也是被允許的)。 在雙方的工作都完成後,進行錄取工作。 每位導師都有自己戰隊的人數上限,這意味著可能有部分選手的較高誌願、甚至是全部誌願無法得到滿足。節目組對” 前i名的錄取結果最優“作出如下定義: 前1名的錄取結果最優,當且僅當第1名被其最高非空誌願錄取(特別地,如果第1名沒有填寫誌願表,那麽該選手出局)。 前i名的錄取結果最優,當且僅當在前i-1名的錄取結果最優的情況下:第i名被其理論可能的最高誌願錄取 (特別地,如果第i名沒有填寫誌願表、或其所有誌願中的導師戰隊均已滿員,那麽該選手出局)。 如果一種方案滿足‘‘前n名的錄取結果最優’’,那麽我們可以簡稱這種方案是最優的。 舉例而言,2位導師T老師、F老師的戰隊人數上限分別都是1人;2位選手Zayid、DuckD分列第1、2名。 那麽下面3種誌願表及其對應的最優錄取結果如表中所示: 技術分享圖片
可以證明,對於上面的誌願表,對應的方案都是唯一的最優錄取結果。 每個人都有一個自己的理想值si,表示第i位同學希望自己被第si或更高的誌願錄取,如果沒有,那麽他就會非常沮喪。 現在,所有選手的誌願表和排名都已公示。巧合的是,每位選手的排名都恰好與它們的編號相同。 對於每一位選手,Zayid都想知道下面兩個問題的答案: 在最優的錄取方案中,他會被第幾誌願錄取。 在其他選手相對排名不變的情況下,至少上升多少名才能使得他不沮喪。 作為《中國新代碼》的實力派代碼手,Zayid當然輕松地解決了這個問題。 不過他還是想請你再算一遍,來檢驗自己計算的正確性。

Input

每個測試點包含多組測試數據 第一行2個用空格隔開的非負整數T;C,分別表示數據組數、每檔誌願最多允許填寫的導師數目。 接下來依次描述每組數據,對於每組數據: 第1行兩個用空格隔開的正整數n;m。 n;m分別表示選手的數量、導師的數量。 第2行m個用空格隔開的正整數:其中第i個整數為bi。 Bi表示編號為i的導師戰隊人數的上限。 第3行至第n+2行,每行m個用空格隔開的非負整數:其中第i+2行左起第j個數為ai,j ai,j表示編號為i的選手將編號為j的導師編排在了第ai,j誌願。特別地,如果ai,j=0,則表示該選手沒有將該導師填入誌願表。 在這一部分,保證每行中不存在某一個正數出現超過C次(0可能出現超過C次),同時保證所有ai,j<=m。 第n+3行n個用空格隔開的正整數,其中第i個整數為Si Si表示編號為i的選手的理想值。 在這一部分,保證Si<=m。 T<=5,m<=n<=200,Bi<=N

Output

按順序輸出每組數據的答案。對於每組數據,輸出2行: 第1行輸出n個用空格隔開的正整數,其中第i個整數的意義為: 在最優的錄取方案中,編號為i的選手會被該檔誌願錄取。 特別地,如果該選手出局,則這個數為m+1。 第2行輸出n個用空格隔開的非負整數,其中第i個整數的意義為: 使編號為i的選手不沮喪,最少需要讓他上升的排名數。 特別地,如果該選手一定會沮喪,則這個數為i。

Sample Input

3 5
2 2
1 1
2 2
1 2
1 1
2 2
1 1
1 2
1 2
2 1
2 2
1 1
0 1
0 1
2 2

Sample Output

2 1
1 0
1 2
0 1
1 3
0 1
三組數據分別與【題目描述】中的三個表格對應。
對於第1 組數據:由於選手1 沒有填寫第一誌願,所以他一定無法被第一誌願錄取,也就一定會沮喪。
選手2 按原排名就不沮喪,因此他不需要提升排名。
對於第2 組和第3 組數據:1 號選手都不需要提升排名。
而希望被第一誌願錄取 的2 號選手都必須升到第1 名才能如願。

HINT

原題面:www.lydsy.com/JudgeOnline/upload/201804/day2(3).pdf

Source

[Submit][Status][Discuss]

D2唯一有區分度的題。。正解好像有4種,下面說一個Dinic做法。

首先如果你非常巧妙地避開了所有有關二分圖和網絡流的思路,你也可以通過各種數據分治拿到70分,但是碼量感覺不可想象。

先之考慮第一問,第二問實在不行二分答案或者暴力枚舉跑m次第一問就好。

看原題面可以看到b[i]=1的50分,這啟發我們想到二分圖,因為每個選手對應一位導師,而匈牙利算法正好保證了每次增廣都保證前面的選手都能匹配上。那麽b[i]>1的怎麽處理呢?不就是網絡流嘛,直接將導師的點向匯點連容量為b[i]的邊就好了。

考慮具體做法,對於當前考慮的選手,每次向一組導師全部連邊,如果增廣成功則考慮下一個選手。

怎麽證明是對的呢?首先我們知道網絡流每次能夠增廣當且僅當流量能變大,所以在增廣這個點的同時不可能讓前面所有的選手找不到匹配,所以我們一邊加邊一邊跑Dinic即可。

至於第二問,第一反應肯定是二分答案然後暴力重建圖,這樣好像是可以過的,但是

[BZOJ5251][九省聯考2018]劈配(網絡流)