Phân rã hữu ích

Đề bài

Mô tả

Cho một cây (đồ thị vô hướng liên thông không có chu trình) gồm n đỉnh.

Bạn cần phân rã các cạnh của cây thành một số đường đi đơn (simple path) sao cho:

  • Mỗi cạnh của cây thuộc về đúng một đường đi.
  • Hai đường đi bất kỳ trong phân rã đều có ít nhất một đỉnh chung.

Hãy tìm một phân rã thoả mãn hoặc cho biết không tồn tại.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n — số đỉnh của cây.
  • n1 dòng tiếp theo, mỗi dòng chứa hai số nguyên aibi mô tả một cạnh của cây (aibi).

Dữ liệu đảm bảo các cạnh tạo thành một cây.

Dữ liệu ra

  • Nếu không tồn tại phân rã, in ra một dòng "No".
  • Ngược lại:
    • Dòng đầu in "Yes".
    • Dòng thứ hai in số nguyên m — số đường đi trong phân rã.
    • m dòng tiếp theo, mỗi dòng chứa hai số nguyên ui,vi (uivi) mô tả một đường đi đơn từ ui tới vi.

Nếu có nhiều phân rã hợp lệ, in ra bất kỳ một phân rã nào.

Ràng buộc

  • 2n105
  • 1ai,bin, aibi

Ví dụ

Input Output Giải thích
4
1 2
2 3
3 4
Yes
1
1 4
Cây là đường thẳng 1234. Một đường đi duy nhất từ 1 tới 4 phủ tất cả các cạnh.
6
1 2
2 3
3 4
2 5
3 6
No Cây có hai đỉnh phân nhánh là 23 (bậc 3). Không thể phân rã thoả điều kiện.
5
1 2
1 3
1 4
1 5
Yes
4
1 2
1 3
1 4
1 5
Cây hình sao tâm 1. Bốn đường đi từ 1 tới từng lá đều giao nhau tại đỉnh 1.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0