匈牙利 最大匹配 人員分配

2021-10-23 14:55:50 字數 1410 閱讀 5203

description

設有m個工人x1, x2, …, xm,和n項工作y1, y2, …, yn,規定每個工人至多做一項工作,而每項工作至多分配一名工人去做。由於種種原因,每個工人只能勝任其中的一項或幾項工作。問應怎樣分配才能使盡可能多的工人分配到他勝任的工作。這個問題稱為人員分配問題。

input

第一行兩個整數m,n分別為工人數和工作數。

接下來乙個整數s,為二分圖的邊數。

接下來s行,每行兩個數ai,bi表示第ai個工人能勝任第bi份工作

output

乙個整數,表示最多能讓多少個工人派到自己的勝任的工作上。

sample input

3 3

41 2

2 13 3

1 3

sample output
3
hint

規模:1<=m,n<=100

1<=s<=10000

解題思路

匈牙利模板

code

#include 

#include

#include

using namespace std;

int k, n, m, x, y, ans, a[

510]

[510

], par[

510]

, v[

510]

;bool dfs

(int girl)

}return0;

}int main()

ans =0;

for(int i =

1; i <= m; i++

)printf

("%d\n"

, ans)

;}

鄰接表做法

因為可以省去兩點之間有沒有連邊的判斷,所以鄰接表會快很多

#include 

#include

#include

using namespace std;

struct dt

a[10000];

int num, k, n, m, x, y, ans, par[

510]

, v[

510]

, head[

510]

;bool dfs

(int girl)

}return0;

}int main()

; head[x]

= num;

} ans =0;

for(int i =

1; i <= m; i++

)printf

("%d\n"

, ans)

;}

最大匹配 人員分配

題目大意 設有m個工人x1,x2,xm,和n項工作y1,y2,yn,規定每個工人至多做一項工作,而每項工作至多分配一名工人去做。由於種種原因,每個工人只能勝任其中的一項或幾項工作。問應怎樣分配才能使盡可能多的工人分配到他勝任的工作。分析 對於1 i m,1 j n,當且僅當工人xi勝任工作yi時,g...

SSL 1338 最大匹配 人員分配

題意 description 設有m個工人x1,x2,xm,和n項工作y1,y2,yn,規定每個工人至多做一項工作,而每項工作至多分配一名工人去做。由於種種原因,每個工人只能勝任其中的一項或幾項工作。問應怎樣分配才能使盡可能多的工人分配到他勝任的工作。這個問題稱為人員分配問題。讀入 input 第一...

最大匹配 人員分配 鄰接矩陣

description 設有m個工人x1,x2,xm,和n項工作y1,y2,yn,規定每個工人至多做一項工作,而每項工作至多分配一名工人去做。由於種種原因,每個工人只能勝任其中的一項或幾項工作。問應怎樣分配才能使盡可能多的工人分配到他勝任的工作。這個問題稱為人員分配問題。input 第一行兩個整數m...