가중치가 있는 트리에서 지나는 정점 수가 최대인 단순 경로를 찾고, 그중 간선 가중치 합이 가장 작은 경로를 골라 그 합을 T로 나눈 올림 값을 구한다.
보통7트리DFS동적 계획법그리디아직 제출이 없습니다시간 제한2초메모리 제한512 MB준오는 멘토에게 과제를 받았다. 과제에 쓰이는 문제 풀이 시스템은 다음과 같다.
준오는 N개 중 아무 문제나 하나 골라 테스트를 시작한다. 처음 고른 문제는 보너스로 취급해서 0초 만에 풀린다. 문제를 푼 뒤에는 그 문제에 연결된 링크 중 하나를 골라 반대쪽 문제로 넘어간다. 링크를 지나는 데 걸리는 시간은 그 링크에 적힌 값이고, A를 푼 뒤 B를 푸는 시간은 B를 푼 뒤 A를 푸는 시간과 같다. 한 번 지나온 문제로는 다시 돌아갈 수 없다.
준오는 이 시스템에서 푸는 문제 수를 최대로 만들려고 한다. 하루에 문제 풀이에 쓸 수 있는 시간은 T이고, 하루치 시간을 다 쓰면 남은 풀이를 다음 날 이어서 한다. 풀이는 날이 바뀌는 지점에서 잘려도 된다. 즉, 고른 경로의 링크 시간 합이 S이면 걸리는 날짜 수는 S를 T로 나눈 값을 올림한 수다. 예를 들어 T가 4이고 링크 시간이 3, 3, 3인 경로를 고르면 합이 9이므로 4 + 4 + 1로 사흘이 걸린다.
푸는 문제 수가 최대인 경로가 여럿이면 준오는 그중 날짜 수가 가장 적은 경로를 고른다. N과 T, 링크 정보가 주어질 때 걸리는 날짜 수를 구하라.
첫째 줄에 문제 수 N과 하루 풀이 시간 T가 주어진다. (2≤N≤50000, 1≤T≤100000) 다음 N−1개 줄에는 줄마다 세 정수 A, B, C가 주어진다. (1≤A,B≤N, 1≤C≤1000) A와 B는 링크로 이어진 두 문제의 번호이고, C는 A를 푼 뒤 B를 풀거나 B를 푼 뒤 A를 푸는 데 걸리는 시간이다.
준오가 문제를 최대한 많이 푸는 데 걸리는 최소 날짜 수를 한 줄에 출력한다.