순환 거리
시간 제한3초메모리 제한512 MB
가중치가 있는 트리에서 서로 다른 정점 k개를 골라, 순서대로 이은 순환 경로의 거리 합을 최대화하는 값을 구합니다.
문제
'Alien' 문제에 나온 기법은 단순한 O(nk) 동적 계획법을 O(n log n)으로 바꾸는 좋은 방법이다. 이 기법을 쓰는 문제가 더 많아지면 대회가 더 나아질 수 있다. 300iq Contest 2에 남은 미해결 문제 두 개가 그런 예다.
가중치가 있는 트리가 주어진다. 정점은 개, 간선은 개다. 번째 간선은 정점 와 를 잇고, 길이는 이다. 를 정점 와 사이 단순 경로에 있는 간선 가중치의 합이라고 하자.
서로 다른 정점 개 를 골라 를 최대로 만들어라. 그 최댓값을 출력한다.
입력
첫 줄에 테스트 케이스의 개수 ()가 주어진다. 각 테스트 케이스는 다음과 같다.
첫 줄에 정수 과 (, )가 주어진다.
이어지는 개의 줄에 정수 , , (, )가 주어진다.
이 보장된다.
출력
각 테스트 케이스마다 답을 나타내는 정수 하나를 한 줄에 출력한다.