Cắt cây theo đường kính

Đề bài

Mô tả

Cho một cây vô hướng gồm n đỉnh và một số nguyên k.

Độ dài của một đường đi đơn (đường đi mà mỗi đỉnh xuất hiện không quá một lần) giữa hai đỉnh là số cạnh trên đường đi đó. Đường kính của một cây là độ dài lớn nhất của đường đi đơn giữa mọi cặp đỉnh của cây.

Bạn sẽ xoá đi một tập cạnh khỏi cây. Khi các cạnh bị xoá, cây tách thành nhiều cây nhỏ hơn. Một tập cạnh được gọi là hợp lệ nếu tất cả các cây con thu được đều có đường kính không vượt quá k.

Hai tập cạnh được coi là khác nhau nếu tồn tại một cạnh chỉ thuộc đúng một trong hai tập.

Hãy đếm số tập cạnh hợp lệ, lấy phần dư khi chia cho 998244353.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nk — số đỉnh của cây và đường kính tối đa cho phép.
  • n1 dòng tiếp theo, mỗi dòng chứa hai số nguyên vu mô tả một cạnh nối hai đỉnh vu.

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

Dữ liệu ra

In ra một số nguyên duy nhất — số tập cạnh hợp lệ, lấy phần dư khi chia cho 998244353.

Ràng buộc

  • 2n5000
  • 0kn1
  • 1v,un, vu

Ví dụ

Input Output Giải thích
4 3
1 2
1 3
1 4
8 Đường kính của cây ban đầu đã không vượt quá k=3. Do đó có thể chọn xoá bất kỳ tập cạnh nào; kết quả luôn hợp lệ. Có 23=8 tập cạnh, kể cả tập rỗng.
2 0
1 2
1 Bắt buộc phải xoá cạnh duy nhất, nếu không đường kính bằng 1>0. Chỉ có một tập hợp lệ.
6 2
1 6
2 4
2 6
3 6
5 6
25 25 tập cạnh mà mọi thành phần đều có đường kính 2.
6 3
1 2
1 5
2 3
3 4
5 6
29 29 tập cạnh mà mọi thành phần đều có đường kính 3.

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 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