Khôi phục cây
Nộp bài giải
Điểm:
6,00 (OI)
Giới hạn thời gian:
1.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 cây (đồ thị vô hướng, liên thông, không chu trình) gồm đỉnh được đánh số bằng các số phân biệt từ đến . Với mỗi cạnh của cây, người ta ghi lại hai số: chỉ số lớn nhất trong mỗi một trong hai thành phần liên thông nhận được khi xoá cạnh (và chỉ xoá đúng cạnh đó) khỏi cây.
Bạn được cho danh sách cặp số như vậy. Hãy chỉ ra một cây bất kì sinh ra đúng danh sách đã cho (có thể theo thứ tự bất kì), hoặc khẳng định rằng không tồn tại cây nào như thế.
Dữ liệu vào
- Dòng đầu chứa số nguyên — số đỉnh của cây.
- Mỗi dòng trong dòng tiếp theo chứa hai số nguyên và — chỉ số lớn nhất trong mỗi thành phần liên thông khi xoá cạnh thứ .
Dữ liệu ra
Nếu không tồn tại cây thoả mãn, in ra một dòng duy nhất chứa NO.
Ngược lại, in ra YES ở dòng đầu, sau đó dòng, mỗi dòng chứa hai số nguyên và () mô tả một cạnh của cây. Thứ tự các cạnh có thể tuỳ ý. Nếu có nhiều cây phù hợp, in ra một cây bất kì.
Ràng buộc
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 4 3 4 1 4 3 4 |
YES 4 2 2 3 3 1 |
Cây là đường . Xoá cạnh cho hai thành phần và , max là . Xoá cạnh cho và , max là . Xoá cạnh cho và , max là . Bất cứ cây nào sinh ra danh sách cặp này (có thể đổi thứ tự) đều được chấp nhận. |
| 3 1 3 1 3 |
NO | Không tồn tại cây trên đỉnh mà hai cạnh đều cho cùng cặp . |
| 3 1 2 2 3 |
NO | Số lớn nhất giữa hai thành phần phải bằng ở mọi cặp, nhưng cặp đầu là . |
Bình luận