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

Vẽ cây trên đường tròn

Đề bài

Mô tả

Cho một cây (đồ thị vô hướng liên thông gồm n đỉnh và n1 cạnh), các đỉnh được đánh số từ 1 đến n.

Ta muốn vẽ cây này lên một đường tròn: đặt n đỉnh của cây vào n điểm phân biệt trên đường tròn, rồi nối các cạnh bằng đoạn thẳng sao cho không có hai cạnh nào cắt nhau. Hai cạnh được coi là không cắt nhau nếu chúng không có điểm chung, hoặc điểm chung duy nhất là một đầu mút chung của cả hai cạnh.

Việc đặt các đỉnh lên đường tròn được mô tả bằng một hoán vị p1,p2,,pn của 1,2,,n: đỉnh i của cây được đặt vào điểm thứ pi trên đường tròn (các điểm được đánh số theo thứ tự dọc đường tròn).

Hãy đếm số hoán vị p sao cho cách vẽ tương ứng thỏa mãn điều kiện không có hai cạnh cắt nhau, kết quả lấy theo modulo 998244353.

Kết quả không phụ thuộc vào việc chọn cụ thể n điểm nào trên đường tròn.

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 uv cho biết có một cạnh nối đỉnh u và đỉnh v.

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

Dữ liệu ra

Một số nguyên duy nhất: số hoán vị hợp lệ, lấy theo modulo 998244353.

Ràng buộc

  • 2n2·105
  • 1u,vn

Ví dụ

Input Output Giải thích
4
1 2
1 3
1 4
24 Cây hình sao. Với hình sao, mọi hoán vị đều hợp lệ, nên kết quả là 4!=24.
4
1 2
1 3
2 4
16 16 hoán vị hợp lệ. Một ví dụ hoán vị không hợp lệ khiến hai cạnh (1,3)(2,4) cắt nhau.

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