Tấn công Xenon (MEX trên cây)

Đề bài

Mô tả

Cho một cây gồm n đỉnh, được đánh số từ 1 đến n. Cây có đúng n−1 cạnh nối các đỉnh.

Ta gán cho mỗi cạnh một số nguyên thuộc tập {0,1,2,…,n−2}, sao cho mỗi số xuất hiện đúng một lần (tức là gán là một hoán vị của các số từ 0 đến n−2 lên các cạnh).

Với mỗi cặp đỉnh (u,v) thoả 1≤u<v≤n, gọi mex(u,v) là số nguyên không âm nhỏ nhất không xuất hiện trên bất kỳ cạnh nào của đường đi đơn từ u đến v trên cây.

Đặt:

S=∑1≤u<v≤nmex(u,v).

Hãy tìm giá trị lớn nhất có thể của S trên tất cả các cách gán nhãn hợp lệ.

Dữ liệu vào

  • Dòng đầu chứa số nguyên n — số đỉnh của cây.
  • n−1 dòng tiếp theo, mỗi dòng chứa hai số nguyên ui và vi (1≤ui,vi≤n; ui≠vi) — mô tả một cạnh nối hai đỉnh ui và vi. Các cạnh được đảm bảo tạo thành một cây.

Dữ liệu ra

In ra một số nguyên duy nhất — giá trị lớn nhất có thể của S.

Ràng buộc

  • 2≤n≤3000.

Ví dụ

Input Output Giải thích
3
1 2
2 3
3 Gán cạnh (1,2)→0 và (2,3)→1. Khi đó mex(1,2)=1, mex(2,3)=0, mex(1,3)=2. Tổng là 1+0+2=3.
5
1 2
1 3
1 4
3 5
10 Một cách gán tối ưu cho tổng S=10. Chẳng hạn các giá trị mex khác 0 là mex(1,3)=1, mex(1,5)=2, mex(2,3)=1, mex(2,5)=2, mex(3,4)=1, mex(4,5)=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.47 awk 1.3.4 gcc 16.2.0 dotnet 10.0.402 g++ 16.2.0 g++-themis 16.2.0 g++17 16.2.0 g++20 16.2.0 g++23 16.2.0 clang++ 22.1.8 dmd 2.113.0 dart 3.13.6 gforth 0.7.3 gfortran 15.3.0 go 1.27.3 groovyc 5.1.3 javac 26.0.2.1 node 26.12.1 julia 1.13.2 kotlinc 2.4.21 lean 4.35.0 sbcl 2.2.9 lua 5.5.1 nim 2.2.12 fpc 3.2.2 fpc-themis 3.2.2 perl 5.42.3 php 8.5.12 pike 8.0 swipl 9.0.4 pypy3 7.3.23 python3 3.15.1 racket 8.7 ruby 4.0.8 rustc 1.99.1 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 swiftc 6.4.1 tclsh 8.6 bun 1.4.4 deno 2.9.8 v 0.5.2 zig 0.17.0