【二分图最佳匹配】丘比特的烦恼
隨著社會(huì)的不斷發(fā)展,人與人之間的感情越來越功利化。最近,愛神丘比特發(fā)現(xiàn),愛情也已不再是完全純潔的了。這使得丘比特很是苦惱,他越來越難找到合適的男女,并向他們射去丘比特之箭。于是丘比特千里迢迢遠(yuǎn)赴中國(guó),找到了掌管東方人愛情的神——月下老人,向他求教。
月下老人告訴丘比特,純潔的愛情并不是不存在,而是他沒有找到。在東方,人們講究的是緣分。月下老人只要做一男一女兩個(gè)泥人,在他們之間連上一條紅線,那么它們所代表的人就會(huì)相愛——無論他們身處何地。而丘比特的愛情之箭只能射中兩個(gè)距離相當(dāng)近的人,選擇的范圍自然就小了很多,不能找到真正的有緣人。
丘比特聽了月下老人的解釋,茅塞頓開,回去之后用了人間的最新科技改造了自己的弓箭,使得丘比特之箭的射程大大增加。這樣,射中有緣人的機(jī)會(huì)也增加了不少。
情人節(jié)(Valentine's day)的午夜零時(shí),丘比特開始了自己的工作。他選擇了一組數(shù)目相等的男女,感應(yīng)到他們互相之間的緣分大小,并依此射出了神箭,使他們產(chǎn)生愛意。他希望能選擇最好的方法,使被他選擇的每一個(gè)人被射中一次,且每一對(duì)被射中的人之間的緣分的和最大。
當(dāng)然,無論丘比特怎么改造自己的弓箭,總還是存在缺陷的。首先,弓箭的射程盡管增大了,但畢竟還是有限的,不能像月下老人那樣,做到“千里姻緣一線牽”。其次,無論怎么改造,箭的軌跡終歸只能是一條直線,也就是說,如果兩個(gè)人之間的連線段上有別人,那么莫不可向他們射出丘比特之箭,否則,按月下老人的話,就是“亂點(diǎn)鴛鴦譜”了。
作為一個(gè)凡人,你的任務(wù)是運(yùn)用先進(jìn)的計(jì)算機(jī)為丘比特找到最佳的方案。
輸入文件格式:
輸入文件第一行為正整數(shù)k,表示丘比特之箭的射程,第二行為正整數(shù)n(n<30),隨后有2n行,表示丘比特選中的人的信息,其中前n行為男子,后n行為女子。每個(gè)人的信息由兩部分組成:他的姓名和他的位置。姓名是長(zhǎng)度小于20且僅包含字母的字符串,忽略大小寫的區(qū)別,位置是由一對(duì)整數(shù)表示的坐標(biāo),它們之間用空格分隔。格式為Name x y。輸入文件剩下的部分描述了這些人的緣分。每一行的格式為Name1 Name2 p。Name1和Name2為有緣人的姓名,p是他們之間的緣分值(p為小于等于255的正整數(shù))。以一個(gè)End作為文件結(jié)束標(biāo)志。每?jī)蓚€(gè)人之間的緣分至多只被描述一次。如果沒有被描述,則說明他們緣分值為1。
輸出文件格式:
輸出文件僅一個(gè)正整數(shù),表示每一對(duì)被射中的人之間的緣分的總和。這個(gè)和應(yīng)當(dāng)是最大的。
輸入樣例(cupid.in):
2
3
0 0 Adam
1 1 Jack
0 2 George
1 0 Victoria
0 1 Susan
1 2 Cathy
Adam Cathy 100
Susan George 20
George Cathy 40
Jack Susan 5
Cathy Jack 30
Victoria Jack 20
Adam Victoria 15
End
輸出樣例(cupid.out):
65
KM的思想還是有點(diǎn)難,花了很多時(shí)間才搞明白。實(shí)際上就是一直不停Hungary,每一個(gè)左邊的一定要匹配一個(gè),(此處假設(shè)左邊是男人,右邊是女人)
一開始讓每一個(gè)男人匹配自己最喜歡的女人,直到匹配失敗,如果失敗了,就降低要求(通過頂標(biāo)來實(shí)現(xiàn),即在左邊標(biāo)記過的點(diǎn)和右邊未標(biāo)記的點(diǎn)所連的邊中找一條最大的,要使左右已標(biāo)記的點(diǎn)的定標(biāo)之和不變,又要降低左邊已標(biāo)記的點(diǎn)和右邊未標(biāo)記點(diǎn)的標(biāo)號(hào)只差)(注意Hungary的原理是一定不破壞原來的關(guān)系,所以只會(huì)更優(yōu)不會(huì)更差)
大概就是這個(gè)思路,只是要注意,此時(shí)標(biāo)記訪問的不僅是女人了,男人也要標(biāo)記訪問了,雖然標(biāo)記的目的不完全相同。男女之間有邊的條件是他們的定標(biāo)之和等于“緣分”。
這道題其實(shí)很裸很簡(jiǎn)單的,只是有一個(gè)地方,如果兩人的線段之間有點(diǎn),就不能連邊,我一開始以為只判斷三點(diǎn)共線就行,其實(shí)必須在兩點(diǎn)之間。有一個(gè)坑爹的就是,忽略大小寫,一開始沒有注意到。
(注意一定要滿足左邊的比右邊的數(shù)量少,否則會(huì)死循環(huán))
總結(jié)
以上是生活随笔為你收集整理的【二分图最佳匹配】丘比特的烦恼的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自旋芯片什么时候应用到计算机,史上首次!
- 下一篇: 零信任架构和访问控制模型ABAC