km演算法的非最優匹配應用

2021-05-25 11:09:58 字數 886 閱讀 3631

km演算法可以用來求最優匹配,但是,它本身蘊含著複雜的數學原理,我暫時還不知道怎麼理解,僅僅在此提一道非匹配應用。

題目:爭奪

題目描述:

小y和小p無聊的時候就喜歡玩遊戲,但是每次小p都輸給了小y。終於有一天,你看不過去了,決定幫小p一把。

遊戲是這樣的,乙個n*m的棋盤(保證n或m中,至少有乙個為偶數)。相鄰格仔之間有乙個給定的正整數權值。要你給這些格仔填上一些值,使得相鄰兩個格仔本身的權值之和,要大於等於他們之間給定的權值。並且要使得所有格仔權值之和最小。

輸入檔案:

第一行乙個數n,m。如題所述。(n,m<=100)

接下來n行,每行2*m個數,第i行,第2*j-1個數和第2*j個數分別描述第i行第j個格仔連向下方格仔的邊的權值 和 連向右方格仔的邊的權值。(這樣的讀入純粹為了方便、統一)。(每個權值》=0 且<=1000)

輸出檔案:

第一行乙個數,表示最少的權值和。

接下來n行,每行m個數。這個矩陣就是你所填的方案。

樣例:

輸入:

2 31 2 3 4 5 6

7 8 9 10 11 12

輸出:15

1 1 3

0 8 2

一看到<=,>=約束條件,我就想到差分約束或上下界網路流,因此陷入思維誤區,一直沒想到與km演算法的聯絡,其實若是將矩陣黑白染色分作兩個集合,每個格仔的值作為頂標,便會得出乙個式子lx[i]+ly[j]>=w[i,j],與km演算法的式子如出一轍,km演算法也就是維護這個式子達到最優匹配,雖然題目與匹配毫無關係,但我們依然可以通過km演算法解題。 

KM求最優匹配 hdu 3488 Tour

km求最優匹配 hdu 3488 tour km求最優匹配 hdu 3488 tour 題意 給出兩個端點和這兩點間的距離,求出這些邊構成的所有環中 邊和最小是多少,每個點只能用一次,即每個點只能在乙個環中 思路 把每個點拆成兩個點,每條邊的出度點 起點 作為x部,入度點 終點 作為y部 然後進行最...

km演算法與最佳匹配

km演算法 該演算法是通過給每個頂點乙個標號 叫做頂標 來把求最大權匹配的問題轉化為求完備匹配的問題的。設頂點xi的頂標為a i 頂點yj的頂標為b j 頂點xi與yj之間的邊權為w i,j 在演算法執行過程中的任一時刻,對於任一條邊 i,j a i b j w i,j 始終成立。km演算法的正確性...

J Spy(多重匹配KM演算法)

隨機打,最後答案乘n,因為我方等概率的遇見敵人,相當於與n個敵人都打一遍,然後貢獻累加作為匹配邊權 bfs版本的km include include include include using namespace std typedef long long ll const int n 510 ll...