最大匹配問題(匈牙利演算法)

2021-10-19 06:19:12 字數 3141 閱讀 4871

結束簡單圖論演算法,撒花(哈哈哈)

這時匈牙利演算法就可以當作月老專用演算法

1 先選乙個陣營

2 進行連線,如果有人,這看他的伴侶,能不能換乙個成立,就換

3 以此類推 , 得最大匹配數

模板一定不要背,理解就可以打出來,不需要硬背,我反正都是理解記憶

int n1, n2;

// n1表示第乙個集合中的點數,n2表示第二個集合中的點數

int h[n]

, e[m]

, ne[m]

, idx;

// 鄰接表儲存所有邊,匈牙利演算法中只會用到從第乙個集合指向第二個集合的邊,所以這裡只用存乙個方向的邊

int match[n]

;// 儲存第二個集合中的每個點當前匹配的第乙個集合中的點是哪個

bool st[n]

;// 表示第二個集合中的每個點是否已經被遍歷過

bool

find

(int x)}}

return

false;}

// 求最大匹配數,依次列舉第乙個集合中的每個點能否匹配第二個集合中的點

int res =0;

for(

int i =

1; i <= n1; i ++

)

肯定很抽象,沒關係(**很簡單)

hdu一道月老題(模板題),看看吧,哈哈

->過山車

**

#include

#include

using

namespace std;

const

int n=

510;

int n,m,k;

int h[n]

,e[n*2]

,ne[n*2]

,idx;

bool st[n]

;int cut[n]

;void

add(

int a,

int b)

bool

find

(int x)}}

return

false;}

intmain()

int ans=0;

for(

int i=

1;i<=n;i++)}

cout<

}return0;

}

還有一道模板題

p2071 座位安排

**

#include

#include

#include

#include

using

namespace std;

const

int n=

8010

;int h[n]

,e[n*2]

,ne[n*2]

,idx;

int macth[n]

;bool st[n]

;int n;

void

add(

int a,

int b)

bool

find

(int x)}}

return

false;}

intmain()

int ans=0;

for(

int i=

1;i<=

2*n;i++

) cout<

return0;

}

再來一道抽像的最大匹配問題

棋盤覆蓋 **

#include

#include

#include

#define x first

#define y second

using

namespace std;

typedef pair<

int,

int> pii;

const

int n=

110;

pii cut[n]

[n];

bool g[n]

[n];

bool st[n]

[n];

int n,m;

int fx=

,fy=

;int

find

(int xx,

int yy)

;return

true;}

}}return

false;}

intmain()

int ans=0;

for(

int i=

1;i<=n;i++

)for

(int j=

1;j<=n;j++)if

((i+j)&1

&&!g[i]

[j])

cout<

return0;

}

詳細解析可以看鏈結的題解,我比較懶

還有一道簡單的棋盤問題

車的放置 **

#include

#include

#include

using

namespace std;

const

int n=

210;

bool g[n]

[n];

bool st[n]

;int cut[n]

;int n,m,t;

bool

find

(int u)}}

return

false;}

intmain()

int ans=0;

for(

int i=

1;i<=n;i++

) cout<

return0;

}

就這麼多吧,最大匹配問題模板不會難,在於怎麼轉換問題

qwq萌新,舉手敬禮

匈牙利演算法(最大匹配問題)

匈牙利演算法 二分圖的最大匹配可以轉換為乙個網路流的問題,但是我們一般使用匈牙利演算法,這種演算法更易於理解,方便編寫。介紹這個演算法之前,首先要介紹一些必要的概念。交錯路 從乙個未匹配點出發,依次遍歷未匹配邊 匹配邊 未匹配邊,這樣交替下去,這條路徑稱為交錯路。增廣路 從乙個未匹配點出發,依次遍歷...

匈牙利演算法 匹配問題

假期 2020.01 27完全匹配 如果乙個匹配中,x y 且匹配數等於 x 則稱此匹配為完全匹配 特別的當 x y 時稱為完美匹配。常見實現步驟 用途 主要用於解決一些與二分圖匹配有關的問題,即部圖匹配最常見的演算法。某公司存在分工問題,一定數量的女員工與男員工搭配,如何搭配才能實現人員的最大利益...

最大匹配 過山車 匈牙利

rpg girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,rabbit只願意和xhd或pqk做partner,grass只願意和l...