만드는 중입니다

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

지뢰

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

요약
가중치가 있는 트리의 각 정점에서 지뢰를 직접 터뜨렸을 때, 반경 안의 지뢰가 연쇄적으로 터지는 개수를 구합니다.
난이도

어려움10점 중 9점

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

문제

"옛날 수열 문제를 꺼내서 이번에는 트리 위에서 풀게 하면 어떨까?"


문제 저자

간선마다 길이가 정해진 트리(사이클이 없는 무방향 그래프)가 주어진다. 각 정점에는 폭발 반경이 정해진 지뢰가 하나씩 놓여 있다. 어떤 지뢰가 폭발하면, 그 지뢰의 폭발 반경 이하의 거리에 있는 정점의 지뢰도 모두 폭발한다. 이 연쇄는 계속된다. 두 정점 사이의 거리는 두 정점을 잇는 단순 경로 위 간선 길이의 합이다. 각 지뢰에 대해, 그 지뢰 하나를 손으로 직접 터뜨렸을 때 몇 개의 지뢰가 폭발하는지 구하라. 손으로 터뜨리는 경우는 지뢰마다 독립적으로 생각한다.

입력

첫 줄에 정수 nn (1≤n≤1000001 \le n \le 100000)이 주어진다. 이는 트리의 정점 수이자 지뢰의 개수이다. 정점은 1부터 nn까지 번호가 매겨져 있다.

둘째 줄에 정수 r1,r2,…,rnr_1, r_2, \ldots, r_n (0≤ri≤10180 \le r_i \le 10^{18})이 주어진다. rir_i는 ii번 정점에 있는 지뢰의 폭발 반경이다.

이후 n−1n-1개의 줄에 정수 aia_i, bib_i, cic_i (1≤ai,bi≤n1 \le a_i, b_i \le n; 1≤ci≤10121 \le c_i \le 10^{12})가 한 줄에 하나씩 주어진다. 이는 길이가 cic_i인 간선이 정점 aia_i와 bib_i를 잇는다는 뜻이다. 입력은 올바른 트리를 나타냄이 보장된다.

출력

nn개의 정수를 한 줄에 출력한다. ii번째 정수는 ii번 정점의 지뢰를 손으로 터뜨렸을 때 폭발하는 지뢰의 개수이다.

힌트

예시 설명: 예시 트리는 다음과 같다.

네 번째 정점의 지뢰를 손으로 터뜨리면 그 폭발로 첫 번째와 두 번째 정점의 지뢰가 터진다. 그러면 첫 번째 정점의 지뢰가 다섯 번째 정점의 지뢰를 터뜨린다. 따라서 모두 네 개의 지뢰가 폭발한다.

예제1

  1. 예제 1

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