cpp-329Đọc toàn bộ đề miễn phí

Kiểm tra một cách ghép cặp có hoàn hảo không

Khi xếp việc cho một nhóm người, một câu hỏi thực tế là: bản phân công đang có đã dùng hết

C++Cơ bản14 phút

Tiến độ của tôi ở bài này

Điểm và code bạn nộp được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

flowbipartite-matchingvalidationentry-ramp

Kiến thức tiên quyết: cpp-basics, arrays.

Nội dung đề bài

Mô tả bài toán

Khi xếp việc cho một nhóm người, một câu hỏi thực tế là: bản phân công đang có đã dùng hết mọi người và phủ hết mọi việc chưa, hay còn ai đó chưa được giao gì? Kiểm tra lại một bản phân công là bước rẻ hơn nhiều so với việc đi tìm một bản phân công tối ưu từ đầu.

Yêu cầu

Cho một đồ thị hai phía: bên trái có n đỉnh đánh số 1..n, bên phải có m đỉnh đánh số 1..m, cùng danh sách e cạnh u v (đỉnh trái u ghép được với đỉnh phải v). Sau đó dữ liệu cho một bản ghép cặp đề xuất gồm k cặp.

Bản ghép cặp này được gọi là hoàn hảo khi thỏa cả ba điều kiện:

  • số cặp đúng bằng n và n bằng m (phủ hết cả hai bên);
  • mỗi cặp đều là một cạnh có trong danh sách cạnh;
  • không đỉnh nào bị dùng hai lần (kể cả ở bên trái lẫn bên phải).

Hãy in YES nếu bản ghép cặp đề xuất hoàn hảo, ngược lại in NO.

Quy ước nộp bài

Nộp chương trình solution.cpp đọc dữ liệu từ stdin và in kết quả ra stdout. Chỉ in đúng YES hoặc NO viết hoa, không in thêm chữ nào khác.

Input

  • Dòng đầu tiên: hai số nguyên n m (1 <= n, m <= 4).
  • Dòng thứ hai: số nguyên e (1 <= e <= 7).
  • e dòng tiếp theo: mỗi dòng hai số nguyên u v (1 <= u <= n, 1 <= v <= m).
  • Dòng tiếp theo: số nguyên k (1 <= k <= 4).
  • k dòng cuối: mỗi dòng hai số nguyên u v là một cặp của bản ghép cặp đề xuất.

Output

In ra YES nếu bản ghép cặp đề xuất hoàn hảo, ngược lại in NO.

Ràng buộc

  • Đồ thị là hai phía, mỗi cặp (u, v) trong danh sách cạnh chỉ xuất hiện một lần.
  • Bản ghép cặp đề xuất có thể dùng cạnh không tồn tại, hoặc dùng lại một đỉnh.
  • Thời gian cho mỗi bộ dữ liệu là 1 giây.

Ví dụ 1

Input

2 2
2
1 1
2 2
2
1 1
2 2

Output

YES

Ví dụ 2

Input

2 2
2
1 1
2 2
1
1 1

Output

NO

Giải thích

Dữ liệu vào:

Cạnh cho phép là 1-1 và 2-2; bản đề xuất dùng đúng hai cặp đó, không đỉnh nào bị dùng lại, và k = n = m = 2. Vậy bản ghép cặp hoàn hảo và kết quả là YES.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.

Nhóm Zalo