Cây XOR
Nộp bài giải
Điểm:
4,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 có đỉnh, đánh số từ đến , gốc tại đỉnh . Mỗi đỉnh có một giá trị ban đầu .
Một thao tác được định nghĩa như sau: chọn một đỉnh . Khi đó:
- Giá trị của bị đảo ().
- Các con (cách một cạnh) của giữ nguyên.
- Các cháu (cách hai cạnh) bị đảo.
- Cứ tiếp tục như vậy: ở khoảng cách chẵn so với thì đảo, ở khoảng cách lẻ thì giữ nguyên.
Hãy đưa giá trị của mỗi đỉnh về đúng bằng số thao tác ít nhất.
Dữ liệu vào
- Dòng đầu: số nguyên .
- dòng tiếp theo: hai số — một cạnh của cây.
- Dòng tiếp theo: số .
- Dòng cuối: số .
Dữ liệu ra
- Dòng đầu: số nguyên — số thao tác tối thiểu.
- dòng tiếp theo: mỗi dòng một số — đỉnh được chọn ở thao tác thứ .
Nếu có nhiều phương án tối ưu, in ra phương án bất kỳ. Thứ tự thực hiện các thao tác không ảnh hưởng đến kết quả cuối cùng.
Ràng buộc
- ,
- Các cạnh tạo thành một cây có gốc tại đỉnh .
Ví dụ
| Input | Output | Giải thích |
|---|---|---|
| 10 2 1 3 1 4 2 5 1 6 2 7 5 8 6 9 8 10 5 1 0 1 1 0 1 0 1 0 1 1 0 1 0 0 1 1 1 0 1 |
2 7 4 |
Chọn : đỉnh bị đảo (từ thành ). Chọn : đỉnh bị đảo (từ thành ). Sau hai thao tác, tất cả các đỉnh đạt đúng giá trị mục tiêu. Thứ tự in các đỉnh không quan trọng vì có nhiều phương án hợp lệ. |
| 1 0 0 |
0 | Đã đạt mục tiêu, không cần thao tác nào. |
| 15 2 1 3 1 4 1 5 1 6 3 7 1 8 1 9 1 10 5 11 9 12 3 13 5 14 5 15 4 1 1 0 0 0 0 1 1 1 0 1 1 1 0 0 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0 |
6 14 10 4 3 6 2 |
Một phương án tối ưu gồm thao tác tại tập đỉnh . Thứ tự liệt kê không ảnh hưởng đến kết quả. |
Bình luận