pstopia Notes for Problem Solving Contest

[Easy] P8XGraphBuilder

Topcoder SRM 527 Div1

Problem

문제에서 말하는 '그래프'는 트리라는 것을 알 수 있다. 트리의 정점이 n개면 모든 정점의 차수는 1 이상, n-1 이하 이고 모든 정점의 차수를 합한 것은 항상 2*(n-1) 이 된다는 것을 알고 넘어가자. 트리의 정점이 2개뿐이라면 그 둘은 차수가 1이다. 정점이 현재 m개 있는 트리에 정점을 새로 하나 추가한다고 생각해보자. 기존에 있던 정점을 하나 고른 뒤, 걔와 간선을 연결해서 추가할 수 있다. 트리이기 때문에 이렇게밖에 추가할 수 없고, 모든 트리를 이런 식으로 만들어낼 수 있다. 새로 추가할 정점과 연결할 정점의 차수를 k라고 하자. 연결한 후엔 이 정점의 차수는 k+1 이 되고 차수가 1인 점이 새로 생긴 것이 된다. 이런 프로세스를 반복하여 정점이 n개가 되었을 때 각 점들의 차수는 어떻게 되는가 하면 우선 차수가 1인 점이 2개 있고 나머지 n-2개 점들에는 1 이상, n-1 이하인 차수가 적당히 배정되어있는데 모든 정점들의 차수를 합했을 때 2*(n-1) 이 되어야 한다. 따라서 이건 냅색이라 할 수 있다. 가방의 용량은 2*(n-1)-2 이고 무게가 k인 보석의 가치는 scores[k-1] 인 상황에서 점수가 최대가 되도록 보석을 n-2개 취하면 되는 것이다. (차수가 1인 점 2개는 무조건 넣어야 하므로 제외했다. 나중에 답에 추가하면 됨.)