Kết nối các trường đại học

Đề bài

Mô tả

Cho một cây gồm n thị trấn được nối với nhau bởi n1 con đường hai chiều, sao cho từ một thị trấn bất kỳ luôn có thể đi tới mọi thị trấn khác. Mỗi con đường có độ dài bằng 1.

Trong số các thị trấn này có 2k thị trấn (đôi một khác nhau) đặt trường đại học. Cần chia 2k trường đại học này thành k cặp, mỗi trường thuộc đúng một cặp. Với mỗi cặp, ta nối hai trường bằng một sợi cáp có độ dài bằng khoảng cách giữa hai thị trấn tương ứng (số con đường trên đường đi ngắn nhất giữa chúng).

Hãy tìm cách chia cặp sao cho tổng độ dài cáp của k cặp là lớn nhất, và in ra tổng đó.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên nk.
  • Dòng thứ hai chứa 2k số nguyên phân biệt u1,u2,,u2k — chỉ số các thị trấn có trường đại học.
  • n1 dòng tiếp theo, mỗi dòng chứa hai số nguyên xjyj cho biết có một con đường nối thị trấn xjyj.

Dữ liệu ra

  • In ra một số nguyên duy nhất là tổng khoảng cách lớn nhất khi chia 2k trường đại học thành k cặp.

Ràng buộc

  • 2n2·105
  • 1kn/2
  • 1uin, các ui đôi một khác nhau.
  • 1xj,yjn, đồ thị tạo thành là một cây.

Ví dụ

Input Output Giải thích
7 2
1 5 6 2
1 3
3 2
4 5
3 7
4 3
4 6
6 Ghép trường ở thị trấn 1 với 6 và trường ở 2 với 5 cho tổng khoảng cách 3+3=6 — là giá trị lớn nhất.
9 3
3 2 1 6 5 9
8 9
3 2
2 7
3 4
7 6
4 5
2 1
2 8
9 Tồn tại cách chia 3 cặp với tổng khoảng cách bằng 9.

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