工人和工作-最大匹配模板题


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

There are no comments at the moment.