중복 없는 드라이브

각 도시에서 g만큼 연료를 한 번만 충전하고 각 도로를 지날 때 d만큼 소모한다. 연료가 음수가 되지 않으면서 지날 수 있는 최대 도시 수를 트리에서 구한다.

어려움8트리DFS동적 계획법그리디아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

JAG 왕국 사람들은 중복을 싫어한다. 예를 들어 왕국의 NN개 도시는 정확히 N1N-1개의 양방향 도로로 연결되어 있고, 어느 도시에서든 도로를 따라 다른 모든 도시로 갈 수 있다. 이 조건에서는 어떤 두 도시 사이에도 경로가 정확히 하나뿐이다. 이것이 중복 없는 도로망이다.

어느 날 왕국의 시민인 당신은 차를 타고 가능한 한 많은 도시를 여행하기로 했다. 차의 연료 탱크는 무한히 크지만 처음에는 비어 있다. 차는 1 km를 달릴 때마다 휘발유 1리터를 소비한다.

각 도시에는 주유소가 정확히 하나 있고, 도시 xx의 주유소에서는 휘발유 gxg_x리터를 넣을 수 있다. 여행 중 일부 주유소는 들르지 않아도 된다. 하지만 같은 주유소에서 두 번 이상 주유하는 것은 중복이므로 하지 않는다. 왕국의 각 도로에는 두 도시 사이의 거리가 정해져 있고, ii번째 도로의 거리는 did_i km이다. 같은 도시나 같은 도로를 두 번 이상 지나는 것도 당연히 중복이므로 하지 않는다.

남은 휘발유가 0이 되면 차는 움직일 수 없고, 여행은 거기서 끝난다. 처음에 탱크가 비어 있는 것은 걱정하지 않아도 된다. 왕국의 어느 도시에서든 그 도시의 주유소에서 여행을 시작할 수 있다. 또한 각 도로는 양 끝 도시의 주유소를 직접 연결하므로 (중복을 피하는 정신은 도시 안에서의 불필요한 이동도 피한다), 도시에 도착하는 순간 탱크가 정확히 비더라도 그 도시에서 주유할 수 있다.

이 중복 없는 원칙을 지키면서 여행할 수 있는 도시 수의 최댓값을 구하는 프로그램을 작성하시오.

입력

입력은 하나의 테스트 케이스로 이루어진다.

N
g1 ... gN
a1 b1 d1
...
aN-1 bN-1 dN-1

첫째 줄에 왕국의 도시 수 NN (1N1000001 \le N \le 100000)이 주어진다. 둘째 줄에 NN개의 정수가 주어지며, 그중 ii번째 정수 gig_i (1gi100001 \le g_i \le 10000)는 도시 ii의 주유소에서 넣을 수 있는 휘발유의 양이다. 다음 N1N-1개 줄에 도로 정보가 주어진다. 그중 jj번째 줄에는 aja_j, bjb_j, djd_j가 주어지며, 이는 jj번째 도로가 도시 aja_j와 도시 bjb_j (1aj,bjN1 \le a_j, b_j \le N, ajbja_j \ne b_j)를 거리 djd_j (1dj100001 \le d_j \le 10000)로 양방향 연결한다는 뜻이다. 왕국의 모든 도시는 도로로 연결되어 있다.

출력

주유소마다 최대 한 번만 주유한다는 제약 아래에서, 어느 도시에서 출발하든 상관없이 여행할 수 있는 도시 수의 최댓값을 출력한다.