trang chủ / bài tập / treefold

Gấp cây

Đề bài

Mô tả

Cho một cây gồm n đỉnh. Ta được phép thực hiện thao tác sau nhiều lần:

Chọn một đỉnh v và hai đường đi có cùng độ dài, cùng xuất phát từ v và chỉ chung nhau đúng đỉnh v: a0=v,a1,,akb0=v,b1,,bk. Ngoài ra, các đỉnh a1,,ak,b1,,bk không được có đỉnh kề nào khác ngoài các đỉnh liền kề trên chính đường đi tương ứng của chúng. Khi đó ta có thể gộp một đường đi vào đường đi kia, tức là các đỉnh b1,,bk bị xóa đi (hai đường đi trùng khít lên nhau).

Hãy xác định xem có thể biến cây đã cho thành một đường đi đơn (một chuỗi đỉnh nối tiếp) bằng một dãy các thao tác như trên hay không. Nếu được, hãy tìm số cạnh nhỏ nhất của đường đi thu được.

Dữ liệu vào

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

Dữ liệu ra

  • In ra 1 nếu không thể biến cây thành một đường đi.
  • Ngược lại, in ra số cạnh nhỏ nhất của đường đi thu được.

Ràng buộc

  • 2n2·105
  • 1u,vn, uv
  • Dữ liệu đảm bảo đồ thị đã cho là một cây.

Ví dụ

Input Output Giải thích
6
1 2
2 3
2 4
4 5
1 6
3 Gộp hai đường đi 216245 (cùng độ dài 2, xuất phát từ đỉnh 2). Sau khi gộp còn lại một đường đi 3 cạnh.
7
1 2
1 3
3 4
1 5
5 6
6 7
-1 Không thực hiện được thao tác nào. Chẳng hạn không thể gộp 134156 vì đỉnh 6 còn có thêm đỉnh kề 7 không nằm trên đường đi.

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