Định hướng các cạnh
Nộp bài giải
Điểm:
7,00 (OI)
Giới hạn thời gian:
3.0s
Giới hạn bộ nhớ:
256M
Đầu vào:
stdin
Đầu ra:
stdout
Dạng bài
Ngôn ngữ cho phép
Ada, Algol, Assembly, Awk, C, C#, C++, D, Dart, Forth, Fortran, Go, Groovy, Java, Javascript, Kotlin, Lisp, Lua, Nim, ObjC, Pascal, Perl, PHP, Pike, Python, Racket, Ruby, Rust, Scheme, Scratch, Sed, TCL, Typescript, V, Zig
Cho một đồ thị gồm đỉnh và cạnh. Đồ thị không nhất thiết liên thông. Một số cạnh đã được định hướng (không thể thay đổi), số còn lại là vô hướng và bạn cần chọn hướng cho chúng.
Hãy định hướng tất cả các cạnh vô hướng sao cho đồ thị thu được là đồ thị có hướng không chứa chu trình (DAG). Lưu ý rằng bạn không được thay đổi hướng của các cạnh đã có hướng và phải định hướng toàn bộ các cạnh vô hướng.
Có bộ dữ liệu độc lập cần xử lý.
Dữ liệu vào
- Dòng đầu chứa số nguyên () — số bộ dữ liệu.
- Với mỗi bộ:
- Dòng đầu chứa hai số nguyên và (, ).
- dòng tiếp theo, dòng thứ gồm ba số , , (, ):
- : cạnh vô hướng nối và .
- : cạnh có hướng từ đến .
Đồ thị không có khuyên (cạnh nối một đỉnh với chính nó) và không có cạnh bội (với mỗi cặp , không tồn tại cặp hay nào khác).
Đảm bảo tổng và tổng trên tất cả các bộ dữ liệu đều không vượt quá .
Dữ liệu ra
Với mỗi bộ dữ liệu:
- Nếu không thể định hướng để thu được DAG, in NO.
- Ngược lại, in YES trên dòng đầu, sau đó in dòng mô tả các cạnh của đồ thị có hướng kết quả (thứ tự tùy ý). Hướng của các cạnh đã có hướng phải giữ nguyên. Nếu có nhiều đáp án, in ra một đáp án bất kỳ.
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 1 3 1 1 2 3 |
YES 2 3 |
Chỉ có một cạnh có hướng từ 2 đến 3, giữ nguyên. |
| 1 3 3 1 1 2 1 2 3 1 3 1 |
NO | Ba cạnh có hướng đã tạo thành chu trình , không thể loại bỏ. |
| 1 6 4 1 1 2 0 2 3 1 4 5 0 5 6 |
YES 1 2 3 2 4 5 6 5 |
Cạnh vô hướng (2,3) được định hướng và (5,6) thành ; đồ thị kết quả không có chu trình. |
Bình luận