해설
리프 정점을 제거하는 연산을 반복하면, 남아 있는 정점들은 항상 연결되어 있다. 반대로 트리의 임의의 연결 부분트리를 하나 정하면, 그 밖의 정점들은 바깥쪽 리프부터 제거하여 모두 없앨 수 있다.
따라서 문제는 가중치 합이 최대인 연결 부분트리를 찾는 문제와 같다.
트리를 정점 을 루트로 잡아 생각하자. 를 정점 를 포함하고, 의 서브트리 안에서만 고르는 연결 부분트리의 최대 가중치 합이라고 하자.
자식 에 대해 가 양수라면 쪽 부분트리를 붙이는 것이 이득이고, 가 음수라면 붙이지 않는 것이 이득이다. 따라서 다음 점화식이 성립한다.
정답은 모든 정점 에 대한 의 최댓값이다. 모든 가중치가 음수일 수도 있으므로, 정답을 만으로 두면 안 되고 모든 정점에서 최댓값을 보아야 한다.
정답의 절댓값은 비트 정수 범위를 넘을 수 있으므로 비트 정수를 사용해야 한다.
시간 복잡도는 이다.