Điểm:
2000 (p)
Thời gian:
1.0s
Bộ nhớ:
512M
Input:
bàn phím
Output:
màn hình
Có \(n\) nam sinh và \(m\) nữ sinh trong một trường học. Tuần tới, một buổi khiêu vũ của trường sẽ được tổ chức. Một cặp nhảy bao gồm một nam sinh và một nữ sinh, và có \(k\) cặp tiềm năng.
Nhiệm vụ của bạn là tìm ra số lượng cặp nhảy tối đa và chỉ ra cách đạt được con số này.
Input
- Dòng đầu tiên là ba số nguyên \(n, m\) và \(k\): số nam sinh, nữ sinh và các cặp tiềm năng. Các nam sinh được đánh số \(1,2,\ldots, n\) và các nữ sinh được đánh số \(1,2,\ldots, m\).
- \(k\) dòng tiếp theo mô tả các cặp tiềm năng. Mỗi dòng gồm hai số nguyên \(a\) và \(b\): nam sinh a và nữ sinh b sẵn sàng nhảy cùng nhau.
Output
- Đầu tiên in một số nguyên \(r\): số lượng cặp nhảy tối đa. Sau đó, in \(r\) dòng mô tả các cặp. Bạn có thể in bất kỳ giải pháp hợp lệ nào.
Constraints
- \(1 \le n, m \le 500\)
- \(1 \le k \le 1000\)
- \(1 \le a \le n\)
- \(1 \le b \le m\)
Example
Test 1
Input
3 2 4
1 1
1 2
2 1
3 1
Output
2
1 2
3 1
Bình luận
include <bits/stdc++.h>
using namespace std;
const int MAXN = 500;
vector<int> adj[MAXN];
int match[MAXN];
bool visited[MAXN];
bool dfs(int u) {
for (int v : adj[u]) {
if (!visited[v]) {
visited[v] = true;
if (match[v] == -1 || dfs(match[v])) {
match[v] = u;
return true;
}
}
}
return false;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
}
Code tham khảo
1 bình luận nữa