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 output3
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...