演算法筆記 匈牙利演算法

2022-03-05 02:33:35 字數 1360 閱讀 1581

匈牙利演算法:從左邊的點出發不斷地搜尋,尋找增廣路,交換交替路上的路徑,來求解二分圖的最大匹配。

模板:

bool dfs(int

u) }

}return

false;}

int ans = 0

;mem(match, -1

);for (int i = 1; i <= n; ++i)

}

p3386 【模板】二分圖匹配

**:

#pragma gcc optimize(2)

#pragma gcc optimize(3)

#pragma gcc optimize(4)#include

using

namespace

std;

#define y1 y11

#define fi first

#define se second

#define pi acos(-1.0)

#define ll long long

//#define mp make_pair

#define pb push_back

#define ls rt<<1, l, m

#define rs rt<<1|1, m+1, r

#define ull unsigned ll

#define pll pair#define pli pair#define pii pair#define piii pair#define pdd pair#define mem(a, b) memset(a, b, sizeof(a))

#define debug(x) cerr << #x << " = " << x << "\n";

#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

//head

const

int n = 2e3 + 5

;int

match[n];

bool

vis[n];

vector

g[n];

intn, m, e, u, v;

bool dfs(int

u) }

}return

false;}

intmain()

int ans = 0

; mem(match, -1

);

for (int i = 1; i <= n; ++i)

}printf(

"%d\n

", ans);

return0;

}

view code

演算法筆記 6 匈牙利演算法

今天我們來看乙個沒有前幾篇講的那麼常用,但是很有用的演算法 匈牙利演算法 hungarian algorithm 匈牙利演算法主要用於解決一些與二分圖匹配 有關的問題,所以我們先來了解一下二分圖。二分圖 bipartite graph 是一類特殊的圖,它可以被劃分為兩個部分,每個部分內的點互不相連。...

匈牙利演算法

匈牙利演算法 edmonds演算法 步聚 1 首先用 標記x中所有的非m頂點,然後交替進行步驟 2 3 2 選取乙個剛標記 用 或在步驟 3 中用 yi 標記 過的x中頂點,例如頂點xi,如果xi與y為同一非匹配邊的兩端點,且在本步驟中y尚未被標記過,則用 xi 去標記y中頂點y。重複步驟 2 直至...

匈牙利演算法

匈牙利演算法用來解決二分圖的最大匹配問題。乙個典型的最大匹配問題的描述如下 乙個公司有n項工作,m個員工。每個員工能勝任n項工作中的幾項 0 n 工作。問題是,如何分配才能使得被處理的工作數最大。當然,如果公司裡人員很多,每項工作都有很多員工可以勝任,那麼使每項工作都有人處理的方案是顯而易見的。但遇...