工人和工作-最大匹配模板题
Submit solution
Points:
100
Time limit:
1.0s
Memory limit:
4M
Author:
Problem type
Allowed languages
C, C++
🧩 模板题目:工人和工作
📖 题目描述:
有 \(n\) 个工人和 \(m\) 个工作岗位。每个工人只能做特定的一些工作,且一个工人 最多只能被分配一个工作,
一个工作岗位也 只能被一个工人占据。
请你求出最多可以匹配多少对 工人-工作岗位,使得工人被分配到他能做的工作。
💡 本质:求 二分图的最大匹配数
📥 输入格式:
第一行包含三个整数 n, m, k(\(1 \le n, m \le 1000, 0 \le k \le n \times m\)), 表示工人数、工作岗位数、以及可以匹配的工人-工作对数量。
接下来 k 行,每行两个整数 u 和 v(\(1 \le u \le n, 1 \le v \le m\)), 表示第 u 个工人可以做第 v 个工作。
工人编号从 1 到 n,工作编号从 1 到 m。
📤 输出格式:
一个整数,表示最大可以分配的工人-工作对数量。
📘 输入样例:
3 3 4
1 1
1 2
2 2
3 3
✅ 输出样例:
3
说明:
- 工人1 → 工作1,
- 工人2 → 工作2,
- 工人3 → 工作3。
刚好匹配成功 3 对。
❌ 输入样例:
3 3 2
1 1
2 1
✅ 输出样例:
1
只能匹配工人1或2中的一个到工作1。
🧠 提示:
- 本题可以使用 Hungarian(匈牙利)算法,也可以用 最大流建模来解。
- 图是 二分图:左边是工人,右边是工作岗位,边表示可匹配。
Comments