만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

사이렌

시간 제한3초메모리 제한1024 MB

요약
가중치가 있는 트리에서 각 방의 사이렌이 거리 d_i 이내의 방을 켜며, 모든 사이렌이 켜지도록 직접 켜야 하는 최소 개수를 구합니다.
난이도

어려움10점 중 9점

유형
트리, 분할 정복, 그래프, DFS
정답자
아직 제출이 없습니다

문제

지하 벙커는 nn개의 방으로 이루어져 있고, 방들은 n−1n - 1개의 복도로 연결되어 있다. 각 복도는 서로 다른 두 방을 잇고 길이가 정해져 있다. 벙커의 어떤 방 ii에서든 다른 어떤 방 jj로 이동할 수 있다. 두 방 사이에는 같은 복도를 두 번 지나지 않는 경로가 정확히 하나 있다. 이 경로에 포함된 복도 길이의 합을 방 ii와 jj의 거리라고 부르며 ρ(i,j)\rho(i, j)로 표기한다.

각 방에는 사이렌과, 이를 작동시키는 음향 센서가 있다. 방 ii의 사이렌은 ρ(i,j)≤di\rho(i, j) \leq d_i를 만족하는 모든 방 jj의 센서를 작동시킨다. 여기서 did_i는 그 사이렌의 출력이다. 즉, 방 ii의 사이렌이 울리면 ρ(i,j)≤di\rho(i, j) \leq d_i를 만족하는 방 jj의 사이렌도 자동으로 울린다. 울린 사이렌은 다시 다른 사이렌을 울릴 수 있다.

비상 상황에서는 일부 사이렌을 수동으로 울려야 한다. 그 소리로 다른 방의 사이렌이 자동으로 울린다. 안전 규정에 따르면, 결국 모든 방의 사이렌이 자동으로 울리도록 수동으로 켤 사이렌의 집합을 골라야 한다.

안전 규정을 만족하는 집합에 속한 사이렌 수의 최솟값을 구하는 프로그램을 작성하라.

입력

첫 줄에 방의 개수 nn이 주어진다.

둘째 줄에는 정수 nn개 d1,d2,…,dnd_1, d_2, \ldots, d_n이 주어진다. did_i는 방 ii의 사이렌이 센서를 작동시키는 최대 거리이다 (0≤di≤1090 \leq d_i \leq 10^9).

이어지는 n−1n - 1개의 줄에는 복도 정보가 주어진다. ii번째 줄에는 정수 세 개 uiu_i, viv_i, lil_i가 있다. uiu_i와 viv_i는 복도로 연결된 서로 다른 방의 번호이고, lil_i는 그 복도의 길이이다 (1≤ui,vi≤n1 \leq u_i, v_i \leq n; 1≤li≤1091 \leq l_i \leq 10^9).

출력

수동으로 울려야 하는 사이렌의 최소 개수를 정수 하나로 출력한다.

제한

1≤n≤300 0001 \leq n \leq 300\,000

힌트

테스트에서 4번 방의 사이렌은 5번 방의 사이렌을 울리고, 5번 방의 사이렌은 6번과 7번 방의 사이렌을 울린다. 2번 방의 사이렌은 3번 방의 사이렌을 울린다. 8번 방의 사이렌은 1번, 9번, 10번 방의 사이렌을 울린다.

예제1

  1. 예제 1

    입력
    10
    1 2 2 2 6 3 4 5 4 3
    1 2 5
    2 3 1
    2 4 5
    4 5 2
    4 6 4
    4 7 3
    1 8 1
    8 9 5
    8 10 4
    
    예상 출력
    3